mysql数据库的优化
-
os + 库
1、 磁盘io比较高磁盘、磁盘空间比较大
2、 os: linux-
os本身就有一些限制
-
ulimit 打开文件数量,操作系统可以运行最大进程+线程数
ulimit -a
:查看系统的全部信息
ulimit -n: 查看最大的文件数量,一般设置为16000
uimit -u:查看最大的进程和线程数
- 库本身配置参数
查看数据库的配置参数:- show variables;
修改这些参数:
1、set gloable 参数名=参数值
2、修改配置文件:/etc/my.cnf (修改后需要重启mysql)
- show variables;
-
数据库配置方面调优
1、数据库连接数不够用
-
数据库的配置
这时候如果这max_connections
和Max_used_connections
两个值相接近,就去修改max_connections
配置,参考open_files_lomits和innodb_open_files的值 -
应用程序的配置文件:
netstat -ano|grep dbms_prot |grep ESTABLISHED |wc -l # 这个命令,在数据库机器中执行 看数据库当前总共有多少的连接数 netstat -ano|grep dbms_prot |grep pjserver_ip |grep ESTABLISHED |wc -l # 这个命令,在数据库机器中执行 可以看到 应用程序pjserver与 数据库建立连接数有多少
如果运用这个命令查看到的连接数比数据库配置的连接数小很多时,可以找开发人员确认,应用程序里配置的连接池是否太小(应该我们没有权限查看这个配置)
2、慢查询日志
步骤:
-
修改mysqld.cnf文件:
慢查询配置 slow_query_log=ON long_query_time=1(单位为s)
-
重启mysql
- 系统直接安装的mysql:systemctl restart mysql
- docker方式安装:docker restart 容器名称
-
运行性能测试脚本
当响应时间一定要大于long_query_time
这个值时,可能会有慢查询日志写入日志文件中 -
就可以定位到慢查询sql
数据库表方面的优化
数据库优化策略:
数据库数据量级在几千,你连索引都可以不建; 几万,到几十万,上百万数据时,考虑索引;上千万的数据时,考虑 分表; 大几千万,甚至上亿级别数据,这个时候考虑分区。 当数据的数据读的操作比写的操作大很多,影响服务器性能时,可以考虑读写分离