资源预览内容
第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
亲,该文档总共6页全部预览完了,如果喜欢就下载吧!
资源描述
我们配置了 MySQL的变量,如何知道使用情况,是否需要调整变量大小,MySQL的系统 变量和状态变量经常是有对应的,比如系统变量Max_connections,在状态变量是 Max_used_connections。这里我们结 合 show variables 和 show status 来查看。11配置基础知识Mysql的变量分为系统变量和自定义变量,系统变量又分为全局变量和会话变量;下面的语 句显示了几种不同的设置会话和全局变量的方法:SETsort_buffer_size=vvalue;SETGLOBAL sort_buffer_size=vvalue;SETsort_buffer_size :=vvalue;SETsession.sort_buffer_size :=;SETglobal.sort_buffer_size :=;SETa :=;注意:单个表示自定义变量,表示系统变量。12通用调优原则键缓存 key_buffer_sizeMyISAM键缓存也被叫做键缓冲区。这里假设只使用MyISAM存储引擎,key_buffer_size 的值应该占到所有保留内存的25%到50%。计算缓存命中率:100-( (Key_reads*100)/Key_read_requests )mysql showglobalstatus likeKey%;计算缓存使用情况:100-( (Key_blocks_unused*key_cache_block_size)*100/key_buffer_size )mysql showglobalstatus likeKey%;mysql show variables likekey%;计算每秒内缓存未命中的数量:Key_reads/Uptimemysql showglobalstatus likeKey%;mysql showglobalstatus likeUptime;或者使用mysqladmin计算每10秒未命中的次数:$ mysqladmin extended-status-r-i10l grep Key_reads在决定给键缓存分配多少内存的时候,知道MyISAM索引使用了多少磁盘空间会比较有帮 助。没有必要让键缓存大于数据的大小。如果使用Unix,可以使用下面的命令找出存储索 引的文件大小:$ du-sch、find/path/to/mysql/data/directory/-name*.MYIInnoDB 缓冲池innodb_bufferool_SzeMySQL手册建议在专用服务器上把80%的物理内存分配给缓冲池。mysql show variables likeinnodb_buffer%;mysql show status likeinnodb_buffer%;mysql show engine innodb status;或者使用innotop工具来监视InnoDB缓冲池的性能和内存使用情况。Binlog_cache_disk_use 和 binlog_cache_usemysql showglobalstatus likebinlog_cache%;mysql showglobalvariables likebinlog_cache%;如果binlog_cache_disk_use和binlog_cache_use之间 的比率很大,那么就应该增力口 binlog_cache_size的值。大部分事务最好都落在二进制日志缓存里面,但是偶尔有一个发生 的磁盘上也无妨。没有非常确定方式可以减少二进制日志缓存未中。最好的办法是增加binlog_cache_size并 且观察缓存未中率是否下降了。一旦未中率下降到了某一个点,就不会再从加大缓存中受 益。假设每秒的未中是一个,并且增加了缓存的大小。让未中减少了到每分钟一次。这已经 足够好了,不可能再让它下降,即使是下降了,也不会再从中得到更多的好处,所以还不 如把内存节约下来做别的事情。线程缓存 7%reod_coc%e_SzeThread_cache_size定义了 MySQL能在缓存中保存的线程数量。除非服务器有很多连接请求, 否则就不需要改变这个变量的值。可以通过观察threads_created变量的值,以确定线程缓冲 是否足够的。设 置这个变量不会立即生效,生效被延迟到了下一次线程关闭的时候。在那时,MySQL 检查缓存中是否有空间存储线程。如果是,它会把线程缓存起来,供另外一个连接使用。 如果不是,它会直接结束掉线程。在这种情况下,缓存中线程的数量,以及线程缓存使用的 内存数量不会立即就下降。只有当新连接为了使用线程把它从缓存中移走的时候才会看到 下降。(MySQL只有在连接关闭的时候才会把线程加入缓存,也只有在创建新连接的时候才 从缓存中移除线程。)mysql showglobalvariables like Thread%;mysql show status likeThread%;表缓存 table_open_cache设置这个变量不会立即生效,要等到下一个线程打开表的时候才会生效。当它生效的时候, MySQL会检查变量的值。如果值大于缓存中表的数量,线程就可以把新打开的表插入到缓 存中。如果值小于缓存中表的数量,MySQL就会把从缓存中删除掉没有使用的表。mysql show globalvariables liketable_open_cache;mysql showglobalstatus likeopen%tables%;如果opened_tables的值很大或者正在上升,那就说明表缓存不够大,应该增加系统变量 table_cache的值(在MySQL中是table_open_cache)。将表缓存变得很大的唯一坏处就是在 有很多MylSAM表的时候,它会导致较长的关闭时间,因为要冲刷键数据块,而且表要被 标记为不再打开。出于同样的原因,它也会导致FLUSH TABLES WITH READ LOCK需要 较长时间才能完成。查询缓存殍呵/必加/观mysql show variables likequery_cache%;mysql show status likeqcache%;在服务器启动的时候,MySQL会为查询缓存一次性分配变量所定义数量的内存。如果更新 了变量(即使是把值设置为当前值),MySQL会立即删除掉所有缓存的查询,重新把缓存设 置为定义的大小,并且重新初始化缓存的内存。13检测MySQL服务器状态变量Aborted_clientsmysql showglobalstatus likeAborted_clients;如果这个变量随时间增加,那么就要确定是否优雅地关闭了连接。如果不是,那就要检查网 络性能,并且检查max_allowed-packet配置变量,超过了 max_allowed_packet的查询会被强 制地中断。Aborted_connectsmysql show global status like Aborted_connects;这个值应该接近于0不是的话,就可能是网络问题。有几个被中断的连接是正常的。例如, 当某些人试着从错误的主机连接、使用了错误的用户名和密码,或者定义了无效的数据库, 就会发生这样的情况。Bytes_received 和 bytesjsentmysql showglobalstatus likeBytes%;这两个值可以帮助你考察问题是有发送服务器的数据过多引起的,还是从服务器读取的数据 太多引起的。它们也许会指出代码中其他的问题,比如查询提取了超出自己需要的数据。Com_*mysql showglobalstatus likeCom_%;应该注意不要让诸如Com_rollback这样不常见的变量的值超过预期值。一种检查合理的值 的快捷的方式是innotop的命令总结模式。Connectionsmysql showglobalstatus likeConnections;这个变量表示了连接意图的数量(不是当前连接的数量,它是threads_connected)。如果它 的值快速增加,例如,每秒几百,那么就应该检查连接次或调整操作系统的网络堆栈。Cireated_tmp_disk_tablesmysql showglobalstatus like%tmp%;如果这个值较高,有两件事情可能发生了错误:(1) 查询在选择BLOB或TEXT列的时候创建了临时表;(2) tmp_table_size 和 max_heap_table_size 可能不够大。Creae_tmp_fablesmysql showglobalstatus like%tmp%;该值较高的唯一处理办法是优化查询。Handler_read_rnd_nextmysql showglobalstatus likehandler_read%;Handler_read_rnd_next / handler_read_rnd显示了全表扫描的大致平均值。如果值较大,那么 就应该优化架构、索引和查询。Max_used_connectionsmysql showglobalvariables likeMax_connections;mysql showglobalstatus likeMax_used_connections;如 果该值和max_connections相同,那么可能是max_connections被设置的过低或者最大负 载超过了服务器的上限。但是不要假设应该增加max_connections。它是保证服务器不会被 太多负载压垮的警戒线。如果看到需求激增,那么就应该检查应用程序的行为是不是正常、 服务器调 优是否正确、服务器架构是否设计良好。这都比简单地增加max_connections要好。Openflesmysql showglobalvariables likeopen_files_limit;mysql showglobalstatus likeOpen_files;注意它不应该和open_file_limit的值接近。如果接近了,那么就应该增加open_files_limit。Select_full_joinmysql showglobalstatus likeSelect_full _joi n;全联接是无索引联接,它是真正的性能杀手。最好能避免全联接,即使是每分钟一次也太多 了。如果联接没有索引,那么最好能优化查询和索引。Select_full_range_joinmysql showglobalstatus likeSelect_full_range_join;如果该变量过高,那么就说明运行了许多使用了范围查询联接表。范围查询比较慢,同时也 是一个较好的优化点。Select_range_pheckmysql showglobalstatus likeSelect_range_check;该变量记录了在联接时,对每一行数据重新检查索引的查询计划的数量,它的性能开销很大。 如果该值较高或正在增加,那么就意味着一些查询没有找到好索引。Slowjaunchjhreadsmysql showglobalstatus lik
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号