首页 > 代码库 > day8-mysql调优

day8-mysql调优

DBA

数据库服务器????响应客户端的连接请求特别慢

  1. 硬件的配置过低——CPU、内存、硬盘
  2. 网络传输速度
  3. 客户端访问量过多,数据库服务器繁忙
  4. 软件问题——数据服务软件的版本性能不行
  5. 程序员编写的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????缓存中块的数量

day8-mysql调优