Jmeter + prometheus + Grafana + Mysql_exporter 进行监控。 提示:只是自己学习笔记,自己做记录用,读者应该看不懂。请见谅
学习目标
- 学会对Mysql数据库的my.cnf文件进行配置
- 学会使用grafana监控服务器的数据库,监控服务器可能出现的性能瓶颈
- 当遇到性能瓶颈时,学会进行调优操作
数据库关键指标:
- TPS 美妙事务数
- QPS 每秒查询量
- 连接数
- 查询吞吐量
- 查询执行能力
- 查询缓存
登录数据库,输入sql
show global status like 'questions'; #数据库的总计查询数
show global status like 'uptime'; #数据库的总计运行时间
每秒事务数=数据库的总计查询数 ÷ 数据库的总计运行时间
my.cnf文件配置
cd /etc,打开my.cnf 如果没有这个文件,就新建一个
log_output=table #设置日志的输出方式,一种是table,另一种是file
slow_query_log=1 #是否打开慢查询日志,设置1表示打开,0表示关闭
#慢查询,指查询速度比较慢的语句,当数据库发现有语句执行速度比较慢时,就会将其记录到日志中
#slow_query_log_file=/var/log/slow_log #如果上一行选择输出到file中,那么这一行填写文件的路径
long_query_time=1 #设置慢查询的阈值,一般设置为1-10秒
log_queries_not_using_indexes=0 #是否记录未使用索引的情况,1表示打开,0表示关闭
#索引,INDEX,一张表中如果有索引,可以加快检索速度
max_connections=512 #最大连接数
datadir=/var/lib/mysql #数据文件的存放目录,一般不要改
socket=/var/lib/mysql/mysql.sock #使用socket时,套接字文件的位置,一般不要改
如果对配置文件进行了修改,需要重启一下mysql
service mysqld restart
system start mysqld
数据库调优
#慢查询语句举例,这个不是项目中的语句,只是举例
select * from sq_orderform; #这个语句没有where条件,在数据量较大时,非常容易出现慢查询
#删除订单表SQ_ORDERFROM中的某个外键与索引,此时再查询订单,就有可能出现慢查询
ALTER TABLE sq_orderform DROP FOREIGN KEY FK9BD986FB1E208F02; #删除外键
ALTER TABLE sq_orderform DROP INDEX FK9BD986FB1E208F02; #删除索引
#当GRAFANA监控到了慢查询语句时,可以在navicat中执行以下语句
select * from mysql.slow_log order by start_time desc;
#按时间倒序显示最近的慢查询语句
#mysql.slow_log 慢查询日志表,如果出现了慢查询,mysql会将出现慢查询的语句写入这个表中
#慢查询语句,记录在sql_text列
#在工作中,将慢查询的SQL语句发给开发处理
#开发调查问题后,发现没有user_id的索引,那么可以添加一下
ALTER TABLE SQ_ORDERFORM ADD CONSTRAINT FK9BD986FB1E208F02 FOREIGN KEY(USER_ID)
REFERENCES SQ_USER(ID) ON DELETE RESTRICT ON UPDATE RESTRICT;
在navicat中,拿到一个慢查询语句,可以尝试进行分析,选中语句,点击"解释已选择的",在下方的解释1里,找到type的值CONST,EQ_REF,REF,RANGE,INDEX,ALL
执行效率CONST > EQ_REF > REF > RANGE > INDEX > ALL
CONST 查询索引字段,且表中只有一行数据
EQ_REF 主键或者唯一索引
REF 非唯一索引
RANGE 索引的范围查询
INDEX 索引
ALL 全表扫描
远程连接数据库时的注意点
#Mysql数据库初始设置下,是不可以远程访问的,需要update一个表
#都市商城服务器的Mysql不需要设置
mysql -u root -p
输入sq #登录到数据库
use mysql #进入mysql库
update user set host='%' where user='root'; #允许远程访问数据库
flush privieleges; #让更改立刻生效