基于一台普通版的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; //修改参数值,当前生效
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短一些;并发数少时,可设置其长一些
–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
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; //指定大小
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 | 缓存中块的数量
+-------------------------+-------+