我有一个运行良好的生产 MySQL 5.1 数据库,但我想提高查询性能。我从未使用过分区,只是浏览了手册。
我有两个表涉及列上的复合键:
Bill_Num Bill_Date
我想在 Bill_Date 创建分区。该表包含四年的记录。我想知道一个新的分区表将如何适应未来几年?我还想知道是否需要更改现有查询中的表名并将表名替换为新的分区表名?
我正在开发一个生产数据库,它的 4 个最大的表每个包含 400 万到 1000 万行,每个包含大约 15 个字段,并在不同的字段类型(数字、varchar 和文本)上有索引。总index_length容量为 2.2GB,总容量data_length为 6GB。所有这些表都使用 MyISAM,它们的读/写比为 66/33。
这是空闲时间 /etc/init.d/mysql status 的输出:
Server version 5.1.37-1ubuntu5
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/mysqld/mysqld.sock
...
Threads: 27 Questions: 5430994 Slow queries: 59 Opens: 298 Flush tables: 1 Open tables: 128 Queries per second avg: 182.695
Run Code Online (Sandbox Code Playgroud)
在高峰时段,每秒的查询数约为 300。
在过去的几周里,数据库变得如此缓慢,有时查询会锁定 2 分钟以上。所以,我增加到key_buffer_size4GB(我机器上有 8GB)。锁定时间减少了。但是在高峰时段还是难以忍受,尤其是读写比接近50/50的时候。
服务器在虚拟环境中运行,因此 I/O 不是很好,并且大多数选择查询ORDER BY <some_indexed_field>在平均 50k 行的结果集上执行。
之前我已经成功地调整了这个数据库,但现在它仍然较小,但现在我被卡住了。
更新: 白天磁盘利用率很容易达到 100%。
我已经从几个地方指出这个脚本,这显然有助于在 Microsoft SQL Server 中设计索引:http : //indexanalysis.codeplex.com/
问题是我使用的是 Sybase ASA 11,它使用的 T-SQL 实现似乎与 MS 使用的略有不同。当我尝试运行脚本时出现各种错误。
我对数据库调优有足够的了解,可以告诉在哪里放置索引,仅此而已。我是一名程序员,所以我不太了解它。
我的问题是: 有没有类似于 Sybase 的这个工具的东西?我需要知道将索引放在哪里,而不必进行每个查询(如果可以避免的话)。
首先,我是一名学生,刚刚接触 Oracle。
快速历史
我已检查以确保我的回收站处于活动状态
SHOW 参数回收站;
命令。
长话短说创建表,添加一些数据,使用标准删除命令删除表,最后没有清除,表不会进入回收站,因此不能使用闪回命令来检索它。关于为什么我的回收站无法正常运行的任何想法,或者我是否遗漏了一些明显的东西?我很绿色所以假设后者:) 任何反馈将不胜感激!
我现在正在使用 Postgres 8.4。性能已开始成为一个问题,因为我们的表的规模和我们在复杂的查询已经长大,所以我开始寻找到一些性能调优,但我不是一个专家在所有的这些东西。
我注意到手册多次提到提高性能的好方法是为查询计划器使用更好的成本常量,但它也说没有简单的方法来确定要使用的成本常量。
我认为常量现在可能有问题,因为估计成本似乎不是实际执行时间的稳定倍数 - 即使在最近运行 VACUUM ANALYZE 之后,它也会从 30 倍到大约 600 倍变化。(我不知道这是否是检查常量是否设置良好的有效方法,如果我错了,请纠正我)
所以,我想为查询规划器设置更好的常量。我该怎么做?我应该随机上下调整直到看起来更快,还是我应该做一些更正式的事情?是否有任何基于硬件或其他方面的指导方针?
顺便说一句,如果答案是“别担心,首先要改进其他事情会更重要”,那很好 - 对于我的实际案例,我会处理其他事情。但对于其他人的缘故,它仍然是好知道怎么一会提高常量,如果一切已经得到了改善。
我观察到一个奇怪的情况,随着时间的推移,查询(下面解释的查询组合)的性能会下降,这意味着在测试开始时(几分钟)查询的时间是 2 毫秒,然后第二天它变成了 15 毫秒然后是 30 毫秒后的一天。
通过查询,我在这里指的是以下任一者的组合:
我想知道可能是什么原因,或者我应该考虑设置配置文件中的哪些设置以及如何设置?我在设置了数据库但未添加主键的 Ubuntu 机器上观察到了这个问题。另一方面,在我开发的 Win 上没有观察到(它在 7 天内平均每个查询 3ms 持续运行)。
我注意到在新数据库(在 Ubuntu 上)中,任何表上都没有主键,这与我开发的数据库相反。缺少主键是否会对此类查询产生负面影响?
我想我会同时问这个问题,因为我正在将我的整个数据库从我的开发机器移到测试机器上。
开发时我使用 PostgreSQL 8.4(CPU:Intel i7 740QM,RAM:6GB),测试时使用 PostgreSQL 9.1(CPU:Intel i3-2100,RAM:3.8GB)。
更新: autovacuum相关参数:
#autovacuum = on
#log_autovacuum_min_duration = -1
#autovacuum_max_workers = 3
#autovacuum_naptime = 1min
#autovacuum_vacuum_threshold = 50
#autovacuum_analyze_threshold = 50
#autovacuum_vacuum_scale_factor = 0.2
#autovacuum_analyze_scale_factor = 0.1
#autovacuum_freeze_max_age = 200000000
#autovacuum_vacuum_cost_delay = 20ms …Run Code Online (Sandbox Code Playgroud) 作为一名 DBA,我会定期观察我的数据库,调整一些查询(让程序员重新编写它,或者添加索引或更新统计信息,如果需要的话,等等)。我还调整了服务器选项等。
但我不满意的是我没有好的指标来说明我的工作是否值得。
在一次性查询优化中,我可以判断我是否让查询运行得更快。我可以使用日志和 pgfouine 来检测慢查询。
但是是否有整体方法来量化数据库的运行情况,跟踪的指标会告诉我我是在总体上改进还是没有真正产生影响,等等?
我正在寻找在数据库级别捕获的指标,而不是在应用程序级别。
我们的 Postgres 性能下降到原来的 1/4,我们不知道为什么。
我们有两台具有相同硬件的机器(我们称它们为 A 和 B):
Intel(R) Xeon(R) CPU E5-4640 0 @ 2.40GHz (64 cores)
384 GB RAM
15k SAS, 16 disk RAID 10 array
Run Code Online (Sandbox Code Playgroud)
每台机器都有基本相同的 Postgres 集群,大约有 100 GB 的数据库,具有以下设置:
version: PostgreSQL 9.4.4 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11), 64-bit
bytea_output: escape
checkpoint_completion_target: 0.7
checkpoint_segments: 256
checkpoint_timeout: 30min
client_encoding: UTF8
cpu_index_tuple_cost: 0.001
cpu_operator_cost: 0.0005
cpu_tuple_cost: 0.003
DateStyle: ISO, MDY
default_text_search_config: pg_catalog.english
dynamic_shared_memory_type: posix
effective_cache_size: 128GB
from_collapse_limit: 4
hot_standby: on
join_collapse_limit: 4
lc_messages: …Run Code Online (Sandbox Code Playgroud) performance database-tuning postgresql-9.4 performance-tuning postgresql-performance
我正在使用 SQL Server 的数据库引擎优化顾问为我的数据库服务器的性能改进生成建议。
对于“消耗工作负载”步骤,它似乎使用了所有可用的内核。然而,对于更耗时的“执行分析”步骤,似乎只使用了一个核心。
有没有办法让它在这一步使用多个内核?
我负责监控、故障排除、调整和优化我公司中在 VMWare 虚拟机中运行的几十个生产 SQL Server 2008 R2/2012。
我请求对 VMWare 基础架构进行只读访问,但没有取得多大成功。我觉得我应该为非技术人员(公司管理层)提供无可辩驳和明确的证据和插图,为什么我需要这样的访问权限。
这些是什么?
更新:
最近,我下载并“试用”了Confio Ignite 试用版,用于监控在 (VMWare) 虚拟机中运行的“我的”SQL Server。
为什么需要这样的访问?
对于无法从 Window 的 PerfMon VM 计数器获取的 DBA,哪些信息是重要的?

相关问题:
database-tuning ×10
performance ×4
postgresql ×3
mysql ×2
index ×1
maintenance ×1
monitoring ×1
myisam ×1
oracle ×1
partitioning ×1
sql-server ×1
sybase ×1