首页 运维 正文
LAMP系统MySQL数据库服务器优化技巧:对查询进行优化

 2022-10-23    352  

LAMP系统MySQL数据库服务器优化技巧:对查询进行优化

  每个会话的设置

LAMP系统MySQL数据库服务器优化技巧:对查询进行优化

  下面这些设置针对于每个会话。在设置这些数字时要十分谨慎,因为它们在乘以可能存在的连接数时候,这些选项表示大量的内存!您可以通过代码修改会话中的这些数字,或者在 my.cnf 中为所有会话修改这些设置。

  当 MySQL 必须要进行排序时,就会在从磁盘上读取数据时分配一个排序缓冲区来存放这些数据行。如果要排序的数据太大,那么数据就必须保存到磁盘上的临时文件中,并再次进行排序。如果 sort_merge_passes 状态变量很大,这就指示了磁盘的活动情况。清单 8 给出了一些与排序相关的状态计数器信息。

  清单 8. 显示排序统计信息

mysql>SHOWSTATUSLIKE"sort%"; 

+-------------------+---------+ 

|Variable_name|Value| 

+-------------------+---------+ 

|Sort_merge_passes|1| 

|Sort_range|79192| 

|Sort_rows|2066532| 

|Sort_scan|44006| 

+-------------------+---------+ 

4rowsinset(0.00sec) 

  如果 sort_merge_passes 很大,就表示需要注意 sort_buffer_size。例如, sort_buffer_size = 4M 将排序缓冲区设置为 4MB。

  MySQL 也会分配一些内存来读取表。理想情况下,索引提供了足够多的信息,可以只读入所需要的行,但是有时候查询(设计不佳或数据本性使然)需要读取表中大量数据。要理解这种行为,需要知道运行了多少个 SELECT 语句,以及需要读取表中的下一行数据的次数(而不是通过索引直接访问)。实现这种功能的命令如清单 9 所示。

  清单 9. 确定表扫描比率

mysql>SHOWSTATUSLIKE"com_select"; 

+---------------+--------+ 

|Variable_name|Value| 

+---------------+--------+ 

|Com_select|318243| 

+---------------+--------+ 

1rowinset(0.00sec) 

mysql>SHOWSTATUSLIKE"handler_read_rnd_next"; 

+-----------------------+-----------+ 

|Variable_name|Value| 

+-----------------------+-----------+ 

|Handler_read_rnd_next|165959471| 

+-----------------------+-----------+ 

1rowinset(0.00sec) 

  Handler_read_rnd_next / Com_select 得出了表扫描比率 —— 在本例中是 521:1。如果该值超过 4000,就应该查看 read_buffer_size,例如 read_buffer_size = 4M。如果这个数字超过了 8M,就应该与开发人员讨论一下对这些查询进行调优了!

原文链接:https://77isp.com/post/8296.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。