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=/var/lib/mysql
- socket=/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
运行时修改 (编辑:好传媒网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|