Mik*_*ter 0 mysql configuration
我在运行企业数据库服务器方面相对较新,作为一名开发人员,我习惯于在默认设置下运行我的数据库,更专注于代码。现在,我发现在企业级别的数据库配置不正确,至少有 2,000 个用户,每天生成超过 1000 张票。
我应该如何配置我的数据库服务器?我阅读了这篇文章https://medium.com/@richb_/tuning-mysql-3-simple-tweaks-6356768f9b90不知何故,我在获取 innodb_buffer_pool_instances 等的过程中迷失了方向。
以下是我目前的配置:
https://pastebin.com/1TaKpRaB -> my.cnf
https://pastebin.com/pWF6SV6W -> 显示变量;
https://pastebin.com/CnwiWmx6 -> 显示全局状态;
放 innodb_buffer_pool_size = 14G
; 在遇到问题之前不要打扰任何其他调整。
如果,按每天 1000 张票,您的意思是每天有几千次查询,那么,那是“微不足道的”。即使每分钟几千个查询也不是很多。
进一步分析...
观察:
更重要的问题:
1700 qps,不是每天查询!所以VARIABLES
和STATUS
都值得研究。
innodb_buffer_pool_size = 14G
因为目前比数据集大得多。)另外
innodb_buffer_pool_instances = 14
Com_rollback
相当高(3.7/秒);您是否故意运行需要撤消的事情?他们能否更快地检查,从而避免可能代价高昂的回滚? Com_rollback
并且Com_commit
价值惊人地接近。听起来很腥。
下一次升级可能会吐槽你innodb_additional_mem_pool_size
,这是未使用和弃用的。从 my.cnf 中删除它。
myisam_sort_buffer_size = 500M
(当前的 3G 可能会导致您耗尽 RAM。)
tmp_table_size
并max_heap_table_size
一起工作。前者危险地高;后者可能太小了。将两者都设置为 200M。
(通常我建议不要使用查询缓存。但是,您的应用程序似乎很好地利用了它。)
Created_tmp_disk_tables
相当高。这和其他一些线索表明查询效率低下。见这对寻找慢查询,并提出他们批判的细节。
由于您在Windows上运行,我认为thread_cache_size
应该设置为0。
细节和其他观察:
( Key_blocks_used * 1024 / key_buffer_size ) = 1,192 * 1024 / 8M = 14.6%
-- 使用的 key_buffer 的百分比。高水位。-- 降低 key_buffer_size 以避免不必要的内存使用。
( innodb_buffer_pool_size / _ram ) = 20480M / 25600M = 80.0%
-- 用于 InnoDB buffer_pool 的 RAM 百分比
( innodb_buffer_pool_instances ) = 20
-- 对于大内存,可以考虑使用1-16个缓冲池实例,每个实例不能少于1GB
( Innodb_buffer_pool_pages_free * 16384 / innodb_buffer_pool_size ) = 1,107,476 * 16384 / 20480M = 84.5%
-- 缓冲池空闲 -- buffer_pool_size 大于工作集;可以减少它
( Innodb_buffer_pool_pages_free / Innodb_buffer_pool_pages_total ) = 1,107,476 / 1310720 = 84.5%
-- 当前未使用的 buffer_pool 的百分比 -- innodb_buffer_pool_size 是否大于必要?
( Innodb_buffer_pool_bytes_data / innodb_buffer_pool_size ) = 3,195,551,744 / 20480M = 14.9%
-- 数据占用缓冲池的百分比 -- 很小的百分比可能表明 buffer_pool 不必要地大。
( Innodb_os_log_written / (Uptime / 3600) / innodb_log_files_in_group / innodb_log_file_size ) = 1,081,532,416 / (80212 / 3600) / 2 / 2048M = 0.0113
-- 比率 -- (见分钟)
( Uptime / 60 * innodb_log_file_size / Innodb_os_log_written ) = 80,212 / 60 * 2048M / 1081532416 = 2,654
-- InnoDB 日志轮换之间的分钟数从 5.6.8 开始,可以动态更改;一定也要更改my.cnf。--(轮换间隔60分钟的建议有点武断。)调整innodb_log_file_size。(无法在 AWS 中更改。)
( Com_rollback ) = 295,694 / 80212 = 3.7 /sec
-- InnoDB 中的回滚。-- 回滚频率过高可能表明应用逻辑效率低下。
( innodb_additional_mem_pool_size ) = 32M
-- (在 5.6.3 中不推荐使用,在 5.7.4 中删除。) -- 不需要很高的值。
( innodb_print_all_deadlocks ) = innodb_print_all_deadlocks = OFF
-- 是否记录所有死锁。-- 如果您受到死锁的困扰,请打开它。注意:如果您有很多死锁,这可能会向磁盘写入大量内容。
( join_buffer_size / _ram ) = 262,144 / 25600M = 0.00%
-- 每个线程 0-N。可能会加速 JOIN(更好地修复查询/索引)(所有引擎)用于索引扫描、范围索引扫描、全表扫描、每个完整 JOIN 等。 -- 如果很大,请减小 join_buffer_size 以避免内存压力。建议小于 1% 的 RAM。如果较小,则增加到 0.01% 的 RAM 以改进某些查询。
( myisam_sort_buffer_size / _ram ) = 3072M / 25600M = 12.0%
-- 用于ALTER, CREATE INDEX, OPTIMIZE, LOAD DATA; 需要时设置。也用于 MyISAM 的维修表。-- 减少 myisam_sort_buffer_size 以防止耗尽 RAM。
( query_prealloc_size / _ram ) = 8,192 / 25600M = 0.00%
-- 用于解析。占 RAM 的百分比
( query_alloc_block_size / _ram ) = 8,192 / 25600M = 0.00%
-- 用于解析。占 RAM 的百分比
( net_buffer_length / max_allowed_packet ) = 16,384 / 256M = 0.01%
( local_infile ) = local_infile = ON
-- local_infile = ON 是一个潜在的安全问题
( Qcache_inserts - Qcache_queries_in_cache ) = (9257553 - 3004) / 80212 = 115 /sec
-- 无效次数/秒。
( Created_tmp_disk_tables ) = 597,469 / 80212 = 7.4 /sec
-- 创建磁盘“临时”表作为复杂 SELECT 的一部分的频率-- 增加 tmp_table_size 和 max_heap_table_size。检查何时使用 MEMORY 而不是 MyISAM 的临时表规则。也许小的架构或查询更改可以避免 MyISAM。更好的索引和查询的重新制定更有可能有所帮助。
( Created_tmp_disk_tables / Created_tmp_tables ) = 597,469 / 614226 = 97.3%
-- 溢出到磁盘的临时表的百分比 -- 也许增加 tmp_table_size 和 max_heap_table_size;改善指标;避免斑点等。
( tmp_table_size ) = 853M
-- 限制用于支持 SELECT的MEMORY临时表的大小-- 减小 tmp_table_size 以避免耗尽 RAM。也许不超过64M。
( Com_rollback / Com_commit ) = 295,694 / 298826 = 99.0%
-- Rollback : Commit ratio -- 回滚代价高昂;改变应用逻辑
( Select_scan ) = 98,730 / 80212 = 1.2 /sec
-- 全表扫描 -- 添加索引/优化查询(除非它们是小表)
( innodb_autoinc_lock_mode ) = 1
-- Galera: 欲望 2 -- 2 = "交错"; 1 =“连续”是典型的;0 =“传统”。
( long_query_time ) = 10
-- 定义“慢”查询的截止(秒)。-- 建议 2
( Threads_created / Connections ) = 322 / 1160 = 27.8%
-- 进程创建速度 -- 增加 thread_cache_size (non-Windows)
异常大:
Com_show_keys = 0.063 /sec
Com_show_plugins = 0.27 /HR
Innodb_buffer_pool_pages_free = 1.11e+6
Qcache_hits = 1529 /sec
Select_range = 35 /sec
Select_range / Com_select = 23.2%
Sort_range = 36 /sec
myisam_sort_buffer_size = 3072MB
Run Code Online (Sandbox Code Playgroud)