如何优化mysql数据库服务器
(那些原因会导致数据库服务器处理客户端的连接请求慢)
一、硬件配置低,导致处理速度慢。 CPU 内存 存储磁盘**
CPU 内存 内存设备
top free -m 转速 15000/s
uptime I/O
固态盘
top –> 0.0 wa
二、网络带宽窄 网络测速软件
三 、数据库提供服务软件的版本低,导致性能低下:
1、 查看数据库服务运行时的参数配置 (查看变量值) my.cnf
mysql> show variables;
mysql> show variables like “%innodb%”;
管理参数
mysql> show variables;
mysql> show variables like “validate_password _policy”;
mysql> show variables like “%password%”;
mysql> set [global] 变量名 = 值 ; 临时修改
myspl> set global validate_password_policy=2;
永久修改密码配置
vim /etc/my.cnf
[mysqld]
validate_password_length=6
validate_password_policy=0
systemctl restart mysqld
2、 常用参数:
并发连接数量
mysql> set GLOBAL max_connections =300;
曾经有过的最大连接数/并发连接数 = 0.85 * 100% =85%
mysql> show global status;
mysql> show global status like “%conn%”;
mysql> show global status like “Max_used_connections”;
曾经有过的最大连接数/并发连接数 = 0.85 * 100% =85%
Max_used_connections/max_connections=0.85
500/x=0.85 * 100% = 85%
show global status like “Max_used_connections”;
set global max_connections = 数字;
连接超时时间
show variables like “%time%”;
connect_timeout 客户端与服务器建立连接时tcp三次握手超时是时间
wait_timeout 户端与服务器建立连接后,等待执行sql命令的超时时间。
可以重复使用的线程的数量 thread
show variables like “%thread%”;
thread_cache_size = 9
所有线程同时打开表的数量
show variables like “%table%”;
table_open_cache
mysqld —–> disk —->x.ibd —-> memory —-> disk
3、缓存的设置:
MySQL服务体系结构:
管理工具:软件安装后,提供的管理命令
连接池:检查服务器是否有资源响应客户端的连接请求
SQL接口: 把sql命令传递给MySQL程序
分析器:检查用户执行的sql命令是否正确
优化器: 对执行的sql命令做优化
查询缓存:存储曾经查找到的查询结果(存储空间时Mysql服务启动时从主机的物理内存里划分出来的)
存储引擎:表的处理器,不同的存储引擎支持不同的功能和数据存储方式
myisam innodb
文件系统:数据服务用来存储数据的硬盘
4、MySQL服务处理查询请求的过程与查询相关参数的设置 (字节) mysqld
select * from t1; read_buffer_size
select * from t1 order by 字段名;sort_buffer_size
select * from t1 group by 字段名;read_rnd_buffer_size
name —-> index
select * from t1 where name=”jim”; key_buffer-size
5、MySQL服务处理查询请求的过程与查询缓存相关参数的设置
show variables like “%cache%”;
show variables like “query_cache%”;
query_cache_wlock_invalidate | OFF 查询缓存写锁有效
当对myisam存储引擎的表执行查询时,若检查到有对表做写操作,数据库服务不从查询缓存里查找结果返回给客户端,而是等写操作完成后,重新从表里查询数据返回给客户端。
pc1 select name from t1 where name=”bob”;
cache —> name=bob
pc2 select name from t1 where name=”bob”;
mysqld-> name= bob;
pc3 update t1 set name=”jack” wehre name=”bob”;
query_cache_type | 0 | 1 | 2
0 禁用了查询缓存
1 若查询结果没有超过缓存数据大小的设置,查询结果会自动存储
2明确指定要把查询结果存储到查询缓存里且查询结果没有超出缓存数据大小的设置
6、查看查询缓存的统计信息:
show global status like “qcache%”;
Qcache_hits 0 当前查询结果时在查询缓存里找到,此变量值自动加1
Qcache_inserts 0 在查询缓存里查找一次数据,此变量值自动加1
Qcache_lowmem_prunes 清理查询缓存空间的次数
7、 修改服务运行时的参数:
a、命令行设置,临时生效。
mysql> set [global] 变量名=值;
b、在配置文件里设置永久生效:
vim /etc/my.cnf
[mysqld]
变量名=值
:wq
四、程序编写sql查询语句太复杂导致,数据库服务器处理速度慢。
开启数据库服务器的慢查询日志,记录超过指定时间显示查询结果的sql命令。 10s
五、 mysql数据库服务日志类型:
错误日志 默认开启 记录服务在启动和运行过程中产生的错误信息log-error=/var/log/mysqld.log
binlog日志 又被称作二进制日志:
慢查询日志: 记录超过指定时间显示查询结果的sql命令
查询日志: 记录所有sql命令。