day8-mysql调优
DBA
数据库服务器 响应客户端的连接请求特别慢
- 硬件的配置过低——CPU、内存、硬盘
- 网络传输速度
- 客户端访问量过多,数据库服务器繁忙
- 软件问题——数据服务软件的版本性能不行
- 程序员编写的SQL语句有问题
硬调优
软调优——服务运行时的运行参数
1、客户端连接数据库服务器?
2、数据库服务器响应客户端的连接请求?
3、连接成功后,执行sql操作(查看 select、写)
4、若执行的是查询操作,先在查询缓存里找数据,找到后直接返回给客户端,若查询缓存里没有,到表对应的文件里去查找——默认会把本次的查询结果保存到查询缓存里,然后在把查询结果返回给客户端
mysql调优
设置数据库服务器运行时的运行参数
查看最多连接并发数——取决于硬件
mysql> show variables like "max_connections";
查看已连接并发数
mysql> show global status like "max_used_connections";
重新统计数据
mysql>flush status;
1、设置数据库服务器的并发连接数
临时设置
mysql>set GLOBAL max_connections =值
永久设置
将max_connectinos=值写到my.cnf文件里[mysqld]下面
max_used_connectinos / max_connectinos=值 * 100%=85%(理想值85%)
max_used_connectinos / max_connectinos=0.85 * 100%=85%
2、客户端连接超时时间的设置
mysql>sql命令
连接超时时间
connect_timeout=值 单位为秒
连接后,等待发送指令的超时时间
wait_timeout=值 单位为秒
默认这两项一般不修改
3、缓存空间的设置
索引缓存空间 默认为8M 单位为字节
mysql> show variables like "key_buffer_size"
mysql> show global status like 'key_read%';
Key_read_requests 索引读取请求总数、
Key_reads 内存中没有找到直接从硬盘读取索引数据
查询缓存空间
每个需要进行排序的线程分配该大小的缓冲区(增加此值加速order by或group by)——当分组和排序较多可把下面调大
mysql> show variables like "sort_buffer_size%";
从数据表顺序读取数据的读操作保留的缓存区的长度
mysql> show variables like "read_buffer_size%";
按某种特定顺序(如何使用了ORDER BY子句的查询)输出的查询结果
mysql> show variables like "read_rnd_buffer_size%";
可以重复使用的保存在缓存中线程的数量——默认值为0
mysql> show variables like "thread_cache_size";
查看进程使用情况
mysql> show global status like 'thread%';
Threads_cached Threads_cached_size
Threads_connected 已有的链接
Threads_created 创建过的线程数
Threads_running 正在运作着的链接
所有线程打开表的数量
mysql> show variables like "table%_cache%";
mysql> show global status like "open%table%";
Open_table_definitions
Open_tables 打开表的数量
Opened_table_definitions
Opened_tables 打开过的表数量
Open_tables / table_cache * 100% =100%(理想值<=95%)
4种类型日志
binlog日志——记录发生改变的SQL语句
慢查询日志——记录超出指定时间显示查询结果的SQL语句
查询日志——记录客户端连接自己后执行的所有SQL语句
general-log
general-log-file=路径
错误日志——记录数据库服务在启动和运行过程中产生的错误——默认开启——文件名/var/lib/mysql/主机名.err——在配置文件log-error=路径
启用mysql数据库服务器的慢查询日志
slow-query-log
slow-query-log-file=路径
long-query-time=超时时间(单位秒)——当查询时间超过X秒,才会被记录
log-queries-not-using-indexes 记录未使用索引的查询
开启日志后重启mysql服务
查看慢查询日志文件记录的内容
使用mysqldumpslow 慢查询日志文件名
显示当前数据库服务器关于查询缓存参数的设置
mysql> show variables like "query_cache%";
query_cache_limit 查询结果超过里面的值,就不保存到查询缓存
query_cache_min_res_unit 缓存块的大小(相当于磁盘的4K)
query_cache_size 查询缓存的大小
query_cache_type 缓存类型(0对应OFF,关闭查询结果放入缓存;1对应ON,开启查询结果放入缓存;2,开启查询结果放入缓存,但查询时需加关键字)
query_cache_wlock_invalidate 当有其他客户端下在对myisam表进行写操作时,如果查询在query cache 中,是否返回cache结果还是等写操作完成再读表获取结果
查询缓存变量的值
mysql> show global status like "qcache%";
Qcache_free_blocks 空闲块的块数(值多了,有碎片)
Qcache_free_memory 缓存中的空闲内存
Qcache_hits 记录查询缓存的次数(每次失去一切都缓存中命中时就自加1)
Qcache_inserts 记录查询总的次数(每次插入一个查询时就自加1,命中次数除以插入次数就是不中比率)
Qcache_lowmem_prunes 当查询缓存空间不足时,记录删除的次数(缓存出现内存不足时,并且必须要进程清理以便为更多查询提供空间的次数)
Qcache_not_cached 记录查询结果超过多大就不允许放入缓存空间的次数(不适合进行缓存的查询数量)
Qcache_queries_in_cache 当前缓存的查询(和响应)的数量
Qcache_total_blocks 缓存中块的数量