mysql性能优化
导致数据库服务器响应客户端的访问请求慢:
1 硬件配置低:cpu(uptime,top) 内存(free -m) 硬盘I/O(top中的wa)
2 带宽:网络测速软件
3 数据库版本低,修改服务运行时配置参数 :
命令行修改,重启服务失效
#mysql>set [global] 变量名=值;
查看变量
#mysql>show variables like "%关键字%"
修改配置文件,永久生效;
vim /etc/my.conf
[mysqld]
变量名=值
影响处理速度参数有那些?
max_connections:最大并发连接数
曾经有过的最大连接数/max_connections=0.85
曾经有过的最大连接数:#mysql>show global status like "max_used_connections";
显示当前的连接信息:#mysql>show processlist;
connect_timeout:建立连接时,tcp三次握手的超时时间,默认10秒
wait_timeout:连接建立后,等待断开的超时时间,默认8个小时
thread_cache_size:充许保存在缓存中可以重复使用线程数量
table_open_cache=3:为所有线程缓存的打开表的数量
mysql的功能模块
连接池: 接收到客户端连接时,检查是否有线程 和资源响应本次连接
SQL接口: 把sql命令传递给mysql服务处理
分析器: 检查sql命令语法是否正确
优化器: 对执行的sql命令做优化处理
查询缓存: 查询缓存空间是从机器的物理内存划分出来的,存储曾经查找过的记录。
表记录。
存储引擎 表处理器 (myisam / innodb )
文件系统 硬盘(存储服务器)
管理工具 软件安装后提供的命令
数据库服务器处理客户端查询请求的过程?
当数据库服务器接收到查询请求时,先在本机的查询缓存里查询数据。若查询
缓存里有查找的数据,从查询缓存提取数据,返给客户端,若没有,到表中查
找记录,找到之后,先把查询结果存放到查询缓存里,在把结果返给客户端。
查看数据库服务器与查询相关参数的设置
mysql> show variables like "query_cache%";
query_cache_type = 0|1|2
0 不允许存
1|2 允许存
1 只要查询结果没超过query_cache_limit就可以存
2 程序要在执行查询时,要在查询命令里加 select 加存放本次查询结果的关键字 * from a;
query_cache_wlock_invalidate | OFF
当客户端查询myisam存储引擎的表时,若此时有客户端同时对查询的表做写
操作的话,数据库服务不从查询缓存里提取查询结果返给客户端,而是等对表
的写操作完成后,重新从表里查找记录返给客户端。
查看当前数据库服务器查询缓存的统计信息
mysql> show global status like "qcache%";
Qcache_hits 5 查询结果是在查询缓存里找到的次数
Qcache_inserts 50 查询请求总数
Qcache_lowmem_prunes 查询缓存空间不足的次数
查询日志文件:记录客户端连接后执行的所有sql命令
general-log
general-log-file=目录名/文件名
慢查询日志:
slow-query-log
slow-query-time=3(超过指定秒数的查询才被记录)
slow-query-log-file=目录名/文件名
#mysqldumpslow db20-slow.log
Qcache_not_cached 35 不允许把查询结果存放到查询缓存里的次数
innodb_lock_wait_timeout 50