首页 > 学院 > 综合知识 > 正文

SQLAdvisor调查与应用

2022-07-16 17:15:39
字体:
来源:转载
供稿:网友
       SQLAdvisor调研与应用:

  一、需求
  1.1、降低慢查询量与影响
  [1]、为降低线上慢查询的数量与影响
  [2]、为减少DBA日常优化的繁杂工作
  [3]、为方便、快速、自动优化慢SQL
  [4]、为直观展示慢SQL结果等
 
  二、SQLAdvisor
  2.1、SQLAdvisor简介
  在数据库运维过程中,优化SQL是业务团队与DBA团队的日常任务。例行SQL优化,不仅可以提升程序性能,还能够降低线上故障的概率。
 
  2.2、SQLAdvisor结构流程图
  SQLAdvisor调研与应用
 
  2.3、SQLAdvisor支持SQL
  insert、update、delete、select、insert select 、select join、update t1 t2 等常见SQL有支持
 
  2.4、SQLAdvisor注意
  SQL中的子查询、or条件、使用函数的条件 会忽略不处理
  命令行传入sql参数时,注意sql中的双引号、反引号 都需要用/转义。建议使用配置文件形式调用
 
  2.5、SQLAdvisor安装
  2.5.1、下载包
  SQLAdvisor-master.zip
  Percona-Server-shared-56-5.6.35-rel81.0.el6.x86_64.rpm
 
  2.5.2、安装
  安装依赖包:
  yum install -y cmake libaio-devel libffi-devel glib2 glib2-devel
  yum -y install Percona-Server-shared-56-5.6.35-rel81.0.el6.x86_64.rpm
 
  注:
  cd /usr/lib64   
  ln -s libperconaserverclient_r.so.18 libperconaserverclient_r.so
 
  安装SQLAdvisor
  解压:unzip SQLAdvisor-master.zip
  cmake -DBUILD_CONFIG=mysql_release -DCMAKE_BUILD_TYPE=debug -DCMAKE_INSTALL_PREFIX=/usr/local/sqlparser ./
  make && make install
  cd SQLAdvisor/sqladvisor
  cmake -DCMAKE_BUILD_TYPE=debug ./
  make
  出现sqladvisor 命令文件且无报错 为安装正确
  cp sqladvisor /usr/bin/sqladvisor
 
  2.5.3、SQLAdvisor使用
   sqladvisor --help
  Usage:
  SQL Advisor Summary
  Help Options:
 
   -?, --help              Show help options
  Application Options:
    -f, --defaults-file     sqls file
    -u, --username          username
    -p, --password          password
    -P, --port              port
    -h, --host              host
    -d, --dbname            database name
    -q, --sqls              sqls
    -v, --verbose           1:output logs 0:output nothing
 
  2.5.4、测试使用
  [root@dbmon SQLAdvisor]# sqladvisor  -u *** -p ***   -h *** -P 6001 -d my -q "select * from my_db where port=6001" -v 1
 
  2017-05-04 11:42:03 27943 [Note] 第2步:开始解析where中的条件:(`port` = 6001)
 
  2017-05-04 11:42:03 27943 [Note] show index from my_db
 
  2017-05-04 11:42:03 27943 [Note] show table status like 'my_db'
 
  2017-05-04 11:42:03 27943 [Note] select count(*) from ( select `port` from `my_db` FORCE INDEX( ux_hostportservicename ) order by host DESC,port DESC limit 353) `my_db` where (`port` = 6001)  
 
  2017-05-04 11:42:03 27943 [Note] 第3步:表my_db的行数:707,limit行数:353,得到where条件中(`port` = 6001)的选择度:353
 
  2017-05-04 11:42:03 27943 [Note] 第4步:开始验证 字段port是不是主键。表名:my_db
 
  2017-05-04 11:42:03 27943 [Note] show index from my_db where Key_name = 'PRIMARY' and Column_name ='port' and Seq_in_index = 1
 
  2017-05-04 11:42:03 27943 [Note] 第5步:字段port不是主键。表名:my_db
 
  2017-05-04 11:42:03 27943 [Note] 第6步:开始验证 字段port是不是主键。

(编辑:错新网)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表