mariadb 内存占用优化 (3)

mysql对于排序,使用了两个变量来控制sort_buffer_size和 max_length_for_sort_data, 不象oracle使用SGA控制. 这种方式的缺点是要单独控制,容易出现排序性能问题.

mysql> SHOW GLOBAL STATUS like '%sort%'; +---------------------------+--------+ | Variable_name | Value | +---------------------------+--------+ | Sort_merge_passes | 0 | | Sort_priority_queue_sorts | 1409 | | Sort_range | 0 | | Sort_rows | 843479 | | Sort_scan | 13053 | +---------------------------+--------+ 5 rows in set (0.00 sec)

如果发现Sort_merge_passes的值比较大,你可以考虑增加sort_buffer_size 来加速ORDER BY 或者GROUP BY 操作,不能通过查询或者索引优化的。我们这为0,那就没必要设置那么大。

读取缓存

read_buffer_size = 128K(默认128K)为需要全表扫描的MYISAM数据表线程指定缓存

read_rnd_buffer_size = 4M:(默认256K)首先,该变量可以被任何存储引擎使用,当从一个已经排序的键值表中读取行时,会先从该缓冲区中获取而不再从磁盘上获取。

大事务binlog mysql> show global status like 'binlog_cache%'; +-----------------------+----------+ | Variable_name | Value | +-----------------------+----------+ | Binlog_cache_disk_use | 220840 | | Binlog_cache_use | 67604667 | +-----------------------+----------+ 2 rows in set (0.00 sec)

Binlog_cache_disk_use表示因为我们binlog_cache_size设计的内存不足导致缓存二进制日志用到了临时文件的次数

Binlog_cache_use 表示 用binlog_cache_size缓存的次数

当对应的Binlog_cache_disk_use 值比较大的时候 我们可以考虑适当的调高 binlog_cache_size 对应的值

如上图,现网是32K,我们加到64K

join语句内存影响

如果应用中,很少出现join语句,则可以不用太在乎join_buffer_size参数的设置大小。

如果join语句不是很少的话,个人建议可以适当增大join_buffer_size到1MB左右,如果内存充足可以设置为2MB。

线程内存影响

Thread_stack:每个连接线程被创建时,MySQL给它分配的内存大小。当MySQL创建一个新的连接线程时,需要给它分配一定大小的内存堆栈空间,以便存放客户端的请求的Query及自身的各种状态和处理信息。

mysql> show status like '%threads%'; +-------------------------+---------+ | Variable_name | Value | +-------------------------+---------+ | Delayed_insert_threads | 0 | | Slow_launch_threads | 0 | | Threadpool_idle_threads | 0 | | Threadpool_threads | 0 | | Threads_cached | 0 | | Threads_connected | 1 | | Threads_created | 9649301 | | Threads_running | 1 | +-------------------------+---------+ 8 rows in set (0.00 sec) mysql> show status like 'connections'; +---------------+---------+ | Variable_name | Value | +---------------+---------+ | Connections | 9649311 | +---------------+---------+ 1 row in set (0.00 sec)

如上:系统启动到现在共接受到客户端的连接9649311次,共创建了9649301个连接线程,当前有1个连接线程处于和客户端连接的状态。而在Thread Cache池中共缓存了0个连接线程(Threads_cached)。

Thread Cache 命中率:

Thread_Cache_Hit = (Connections - Threads_created) / Connections * 100%;

一般在系统稳定运行一段时间后,Thread Cache命中率应该保持在90%左右才算正常。

内存临时表

tmp_table_size 控制内存临时表的最大值,超过限值后就往硬盘写,写的位置由变量 tmpdir 决定

max_heap_table_size 用户可以创建的内存表(memory table)的大小.这个值用来计算内存表的最大行数值。

Order By 或者Group By操作多的话,加大这两个值,默认16M

mysql> show status like 'Created_tmp_%'; +-------------------------+-------+ | Variable_name | Value | +-------------------------+-------+ | Created_tmp_disk_tables | 0 | | Created_tmp_files | 626 | | Created_tmp_tables | 3 | +-------------------------+-------+ 3 rows in set (0.00 sec)

如上图,写入硬盘的为0,3次中间表,说明我们的默认值足够用了

mariadb 推荐配置

注意这里只推荐innodb引擎

内存配置只关注有注释的行

[mysqld] datadir=http://www.likecs.com/var/lib/mysql socket=http://www.likecs.com/var/lib/mysql/mysql.sock default-storage-engine=INNODB character-set-server=utf8 collation-server=utf8_general_ci user=mysql symbolic-links=0 # global settings table_cache=65535 table_definition_cache=65535 max_allowed_packet=4M net_buffer_length=1M bulk_insert_buffer_size=16M query_cache_type=0 #是否使用查询缓冲,0关闭 query_cache_size=0 #0关闭,因为改表操作多,命中低,开启消耗cpu # shared key_buffer_size=8M #保持8M MyISAM索引用 innodb_buffer_pool_size=4G #DB专用mem*50%,非DB专用mem*15%到25% myisam_sort_buffer_size=32M max_heap_table_size=16M #最大中间表大小 tmp_table_size=16M #中间表大小 # per-thread sort_buffer_size=256K #加速排序缓存大小 read_buffer_size=128k #为需要全表扫描的MYISAM数据表线程指定缓存 read_rnd_buffer_size=4M #已排序的表读取时缓存,如果比较大内存就到6M join_buffer_size=1M #join语句多时加大,1-2M thread_stack=256k #线程空间,256K or 512K binlog_cache_size=64K #大事务binlog # big-tables innodb_file_per_table = 1 skip-external-locking max_connections=2048 #最大连接数 skip-name-resolve # slow_query_log slow_query_log_file = /var/log/mysql-slow.log long_query_time = 30 group_concat_max_len=65536 # according to tuning-primer.sh thread_cache_size = 8 thread_concurrency = 16 # set variables concurrent_insert=2 运行时修改

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxpfd.html