加入收藏 | 设为首页 | 会员中心 | 我要投稿 宁德站长网 (https://www.0593zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MariaDB内存占用优化

发布时间:2019-03-08 18:28:34 所属栏目:MySql教程 来源:腾讯云加社区
导读:副标题#e# 查询最高内存占用 使用以下命令可以知道mysql的配置使用多少 RAM SELECT(@@key_buffer_size +@@query_cache_size +@@innodb_buffer_pool_size +@@innodb_additional_mem_pool_size +@@innodb_log_buffer_size +@@max_connections*(@@read_buffer_

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

  1. mysql> show status like '%threads%'; 
  2. +-------------------------+---------+ 
  3. | Variable_name           | Value   | 
  4. +-------------------------+---------+ 
  5. | Delayed_insert_threads  | 0       | 
  6. | Slow_launch_threads     | 0       | 
  7. | Threadpool_idle_threads | 0       | 
  8. | Threadpool_threads      | 0       | 
  9. | Threads_cached          | 0       | 
  10. | Threads_connected       | 1       | 
  11. | Threads_created         | 9649301 | 
  12. | Threads_running         | 1       | 
  13. +-------------------------+---------+ 
  14. 8 rows in set (0.00 sec) 
  15.  
  16. mysql> show status like 'connections'; 
  17. +---------------+---------+ 
  18. | Variable_name | Value   | 
  19. +---------------+---------+ 
  20. | Connections   | 9649311 | 
  21. +---------------+---------+ 
  22. 1 row in set (0.00 sec) 

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

Thread Cache 命中率:

  1. 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

  1. mysql> show status like 'Created_tmp_%'; 
  2. +-------------------------+-------+ 
  3. | Variable_name           | Value | 
  4. +-------------------------+-------+ 
  5. | Created_tmp_disk_tables | 0     | 
  6. | Created_tmp_files       | 626   | 
  7. | Created_tmp_tables      | 3     | 
  8. +-------------------------+-------+ 
  9. 3 rows in set (0.00 sec) 
  • 如上图,写入硬盘的为0,3次中间表,说明我们的默认值足够用了

mariadb 推荐配置

  • 注意这里只推荐innodb引擎
  • 内存配置只关注有注释的行
  1. [mysqld] 
  2. datadir=/var/lib/mysql 
  3. socket=/var/lib/mysql/mysql.sock 
  4. default-storage-engine=INNODB 
  5.  
  6. character-set-server=utf8 
  7. collation-server=utf8_general_ci 
  8.  
  9. user=mysql 
  10. symbolic-links=0 
  11.  
  12. # global settings 
  13. table_cache=65535 
  14. table_definition_cache=65535 
  15.  
  16. max_allowed_packet=4M 
  17. net_buffer_length=1M 
  18. bulk_insert_buffer_size=16M 
  19.  
  20. query_cache_type=0              #是否使用查询缓冲,0关闭 
  21. query_cache_size=0              #0关闭,因为改表操作多,命中低,开启消耗cpu 
  22.  
  23. # shared 
  24. key_buffer_size=8M              #保持8M MyISAM索引用 
  25. innodb_buffer_pool_size=4G              #DB专用mem*50%,非DB专用mem*15%到25% 
  26. myisam_sort_buffer_size=32M 
  27. max_heap_table_size=16M             #最大中间表大小 
  28. tmp_table_size=16M              #中间表大小 
  29.  
  30. # per-thread 
  31. sort_buffer_size=256K               #加速排序缓存大小 
  32. read_buffer_size=128k               #为需要全表扫描的MYISAM数据表线程指定缓存 
  33. read_rnd_buffer_size=4M             #已排序的表读取时缓存,如果比较大内存就到6M 
  34. join_buffer_size=1M             #join语句多时加大,1-2M 
  35. thread_stack=256k               #线程空间,256K or 512K 
  36. binlog_cache_size=64K               #大事务binlog 
  37.  
  38.  
  39. # big-tables 
  40. innodb_file_per_table = 1 
  41. skip-external-locking 
  42. max_connections=2048                #最大连接数 
  43. skip-name-resolve 
  44.  
  45. # slow_query_log 
  46. slow_query_log_file = /var/log/mysql-slow.log 
  47. long_query_time = 30 
  48. group_concat_max_len=65536 
  49.  
  50. # according to tuning-primer.sh 
  51. thread_cache_size = 8 
  52. thread_concurrency = 16 
  53.  
  54. # set variables 
  55. concurrent_insert=2 

运行时修改

(编辑:宁德站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读