基于一台普通版的MySQL服务器

目的:加快服务器的响应速度

进程数=进程*线程


1、Mysql的查询过程

 1)客户端向服务器发送连接请求

 2)服务器端(连接池)开辟线程响应用户请求

 3)用户发起sql语句查询数据库select * from db.a;

 4)查询缓存:记录用户的sql执行语句和查询结果

2、加快Mysql服务器的运行速度

 1)替换有问题的硬件(最有效的方法)

    如:CPU、内存、硬盘


 2)对Mysql进程的设置进行调优

   A、并发数

     优化mysql数据库的性能参数:

max_connections     //服务器允许的并发访问量,默认值100

max_used_connections  

 //已经响应的连接数,max_connections * 100% = 99.6% (理想值 ≈ 85%


–vi /etc/my.cnf       //在配置文件/etc/my.cnf中设置永久生效

[mysqld]

max_connections = 1000

    

     mysql>use mysql;

    mysql>show variables like‘max_connections’;   //查看最多并发连接数,默认100       mysql>show global status like‘max_used_connections’;   //当前已连接数 

mysql> flush status;                     //刷新       

mysql>set global max_connections=200;         //修改参数值,当前生效


   B、超时

mysql>show variables like ‘connect_timeout;  // 连接超时时间,单位为秒,默认10s      mysql>show variables like ‘wait_timeout;    

//客户端与服务器连接时,客户端在28800S没有执行任何操作,服务器端会自动断开连接,在      关闭它之前,在一个连接上等待行动的秒数,默认28800s                                                  

     mysql>set global connect_timeout=20;   //全局修改前面加global修改    

mysql>set wait_timeout=7200;     //不在全局修改,用这条命令                                       

并发数多时,可设置connect_timeout短一些;并发数少时,可设置其长一些


   C、索引缓冲区

key_buffer  索引缓冲区大小单位M, 默认是16M, 显示单位字节

计算索引未命中缓存的概率公式:Key_reads / Key_read_requests * 100%=值 越小越好

  概率高时说明找到的机率小,可在配置文件中适当加大key_buffer的值

-概率低时应适当加大key_buffer的值

 

mysql>show variables like‘key_buffer_size’; //查看索引缓冲区的大小       mysql>show variables like ‘key_read%’;    

//key_read_requests 索引读取请求总数key_reads在内存中没有找到,直接从硬盘中读取索引的数量  

                

vim /etc/my.cnf    //设置                    

[mysqld]                                                        key_buffer = 16M                                      


8bit=1字节,1024字节=1K,1024K=1M ,1024M=1G,1024G=1T


   D、其它设置

sort_buffer_size = 512K

–每个需要进行排序的线程分配该大小的缓冲区。增加此值加速order by或group by查询的、  速度,查询显示单位字节

mysql> show variables like ‘sort_buffer_size’;    

 

    read_buffer_size = 256K

–从数据表顺序读取数据的读操作保留的缓存区的长度

mysql> show variables like"read_buffer_size%";

 

read_rnd_buffer_size = 512K

–按某种特定顺序(比如使用了ORDER BY子句的查询)输出的查询结果

mysql> show variables like"read_rnd_buffer_size%";

 

thread_cache_size = 10 

–可以重复使用的保存在缓存中线程的数量 (默认值是0)                       mysql> show variables like 'thread_cache_size';

mysql> set global thread_cache_size=10;     //指定大小  



   3)对查询进行优化

A、记录慢查询

vi /etc/my.cnf

[mysqld]

log-slow-queries          //启用慢查询日志

log-query-time=5          //记录5秒没有显示结果集的查询 默认10秒

log-queries-not-using-indexes   //记录没有使用索引查询

[root@localhost ~]mysqldumpslow  mysqld-slow.log  //查看慢查询日志的内容

 

B、服务器关于查询缓存的配置    

     mysql> show variables like "query_cache%";

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

     | Variable_name           | Value  |

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

     | query_cache_limit        | 1048576 | 超过此大小的查询将不缓存

     | query_cache_min_res_unit   |4096   | 缓存块的最小大小

     | query_cache_size         | 0     | 查询缓存大小

     | query_cache_type         | ON    | 缓存类型,决定缓存什么样的查询

     | query_cache_wlock_invalidate | OFF   | 当有其他客户端正在对MyISAM表进行写操作                                   时,如查询在query cache中,是否返回cache                                   结果,还是等写操作完成再读表获取结果

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

     mysql> show global status like "qcache%";

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

     | Variable_name       | Value |

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

     | Qcache_free_blocks    | 0   | 缓存中相邻内存块个数,数目大说明可能有碎片

     | Qcache_free_memory    | 0   | 缓存中的空闲内存

     | Qcache_hits         | 0   | 每次查询在缓存中命中时就增大 

     | Qcache_inserts       | 0   | 每插入一个查询就增大,命中次数/插入数就是不中比

     | Qcache_lowmem_prunes   | 0   | 缓存出现内存不足并且必须要进行清理以便为更多查询                              提供空间的次数

     | Qcache_not_cached     | 0   | 不适合进行缓存查询的数量

     | Qcache_queries_in_cache | 0   | 当前缓存查询(和响应)的数量

     | Qcache_total_blocks   | 0   |  缓存中块的数量

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