分析命令
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 [变量名]=[变量值]; 实现。