MySQL常见性能调优命令汇总

MySQL常见性能调优命令汇总

分析命令

show full processlist; #该命令用于查看当前连接到mysql服务器的链接,以及经行的什么操作及状态。如果不加full,只能列出当前100条。

show [global|session] status; #用于数据库运行时统计信息,默认是session。

show [global|session] variables; #用于查询数据库的设置。
注意:show status/variables 默认session是查看当前会话的值,global是全局的。通俗解释:一个是你本session的值,一个是所有session累计的值。

show create table [具体表名]; #查看表的详细的创建语句,便于用户对表进行优化。
show indexes from [具体表名]; #查看表的所有索引,cardinality列很重要,表示不重复记录的预估值(不是一个准确值)。
注意:在实际应用中,Cardinality/n_row_in_table (n_row_in_table为表记录行数)应尽可能的接近1,如果非常小,那用户需要考虑是否还有必要创建这个索引。

确定耗时较多的查询语句

show status like 'slow_queries';  #查询慢查询次数。

show variables like 'long_query_time'; #查看慢查询设置的时间 ,默认10s。

set long_query_time = 1;  #设置慢查询时间。

set GLOBAL slow_query_log = ON; #开启慢日志。 

show variables like '%quer%'; #模糊查找quer相关设置,在 slow_query_log_file 可以找到慢日志文件的位置。

explain [具体的sql语句] #使用explain来分析SQL语句实现优化SQL语句,explain后面的SQL语句并不会执行。

explain partitions [具体的sql语句] #用于查看存在分区的表的执行计划。

数据库连接数

show variables like 'max_connections'; #查看当前服务器配置的最大连接数。

set GLOBAL max_connections=10000; #设置最大连接数。

show GLOBAL status like '%max_used_connections%'; #查看当前已使用最大连接数。

设置连接超时时间

wait_timeout的作用是,设置非交互连接(就是指那些连接池方式、非客户端方式连接的)的超时时间,默认是28800秒,就是8小时,超过这个时间,mysql服务器会主动切断那些已经连接的,但是状态是sleep的连接。
show global variables like 'wait_timeout';  #查看当前wait_timeout,单位是 秒。
set global wait_timeout=300;  #设置wait_timeout为 300 秒。

interactive_timeout针对交互式连接的超时时间,所谓的交互式连接,即在mysql_real_connect()函数中使用了CLIENT_INTERACTIVE选项。
show global variables like 'interactive_timeout'; #查看当前interactive_timeout,单位是 秒。
set global interactive_timeout=500; #设置interactive_timeout为500秒。

如何区分交互式连接和非交互式连接?

说得直白一点,通过mysql客户端连接数据库是交互式连接,通过jdbc连接数据库是非交互式连接。在连接启动的时候,根据连接的类型,来确认会话变量wait_timeout的值是继承于全局变量wait_timeout,还是interactive_timeout。

文件打开数

show variables like 'open%'; #查看当前服务器允许的最大打开文件数。

show global status like 'open%file%'; #Open_files系统当前打开的文件数 ;Opened_files系统打开过的文件总数。

其他常见性能查询

show global status like 'Thread%'; #进程使用情况。

show variables like 'key_buffer_size'; #索引块(index blocks)缓存的大小,只对MyISAM表起作用,也是MyISAM表性能影响最大的一个参数。

show variables like 'table_cache';  #表高速缓存的大小。不能盲目地把table_cache设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。

show variables like 'thread_cache_size'; #线程池缓存大小,当 Threads_cached 越来越少,但 Threads_connected 始终不降 且 Threads_created 持续升高,这时可适当增加 thread_cache_size 的大小。

show global status like 'qcache%'; #查询缓存(query cache)。Qcache_lowmem_prunes的值非常大,则表明经常出现缓存不够的情况,同时Qcache_hits的值非常大,则表明查询缓存使用非常频繁,此时需要增加缓存大小;Qcache_hits的值不大,则表明你的查询重复率很低,这种情况下使用查询缓冲反而会影响效率,那么可以考虑不用查询缓存。

小贴士:

根据上面命令应该都能总结得出:
①通过 show variables like 语句,我们可以查询指定MySQL设置的情况,show status同样如此做筛选;
②设置变量值 可以通过 set global [变量名]=[变量值]; 实现。 



留言