ITPUX技术网

交流 . 资讯 . 分享
Make progress together!
Linux操作系统下Oracle11g R2 RAC 安装配置教程
Oracle数据库培训-备份恢复-性能优化-集群容灾
Oracle数据库DBA高级工程师培训视频

SQL优化-检索及定位

内容发布:luashin| 发布时间:2017-6-8 17:00:56
SQL优化-检索及定位

一、执行频率早知道
show status;
使用 show status了解各种sql的执行频率
可搭配参数 global 全局查看,或者session当前连接开始计数 默认不加参数是指查看当前连接
show status;
+-----------------------------------------------+----------------+
| Variable_name                                 | Value          |
+-----------------------------------------------+----------------+
| Aborted_clients                               | 65             |
| Aborted_connects                              | 589            |
| Binlog_cache_disk_use                         | 0              |
| Binlog_cache_use                              | 0              |
| Binlog_stmt_cache_disk_use                    | 0              |
| Binlog_stmt_cache_use                         | 0              |
| Bytes_received                                | 1649           |
| Bytes_sent                                    | 11767          |
| Com_admin_commands                            | 0              |
| Com_assign_to_keycache                        | 0              |
| Com_alter_db                                  | 0              |
| Com_alter_db_upgrade                          | 0              |
...

常见的统计参数
Com_select :执行select操作的次数,一次只累加1
Com_insert:执行insert操作的次数,一次也只累加1
Com_update:执行update操作的次数
Com_delete:执行delete的次数
Innodb_rows_read select查询的返回的行数
Innodb_rows_inserted 执行INSERT操作插入的行数
Innodb_rows_updated 执行update操作更新的行数
Innodb_rows_deleted 执行deleted操作删除的行数
Connections:试图连接MYSQL服务器的次数。
Uptime 服务器工作时间。
Slow_queries 慢查询的次数。

查看慢查询次数
mysql> show global status like 'Slow_queries';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Slow_queries  | 4     |
+---------------+-------+
1 row in set (0.00 sec)

二、效率较低早查询
开启慢查询日志
    MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间通过long_query_time值来设定,超过这个值则会被记录到慢查询日志中。long_query_time的默认值为10,默认情况下,mysql数据库并不启动慢查询日志,需要我们手动来设置这个参数,当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表。
1>查看是否开启忙日志查询
show variables like '%slow_query_log%';

2>开启满日志查询
1.配置文件修改
log-slow-queries = /usr/local/mysql/var/slowquery.log
long_query_time = 3  #单位是秒
log-queries-not-using-indexes

2.使用sql语句修改
set global log_slow_queries = ON;
set global slow_query_log = ON;
set global long_query_time=0.01#单位是秒

3>慢日志格式
select * from auction1.user where user_name='liaoxz';
执行的慢查询语句
# Time: 170427  4:41:48
日志记录的时间
# User@Host: root[root] @ localhost []
服务器用户/主机名
# Query_time: 10.007816  Lock_time: 0.000000  Rows_sent: 1  Rows_examined: 0
总的查询时间、锁定时间、"发送"或者返回的行数、查询过程中所检查的行数

三、分析语句早实行
show profiles
profiling在mysql中默认是关闭的,在数据库会话级别可以打开,开启之后会收集在执行语句时候所使用的资源
在会话打开profilinges
set profiling=1;
使用show profiles查看执行的语句的持续时间和ID
MariaDB [auction1]> show profiles;
+----------+------------+------------------------------------------------------------------------------------------------------------------+
| Query_ID | Duration   | Query                                                                                                            |
+----------+------------+------------------------------------------------------------------------------------------------------------------+
|        6 | 0.00038804 | select * from orders limit 1                                                                            |
|        7 | 0.00019379 | select * from orders limit 1                                                                            |
|        8 | 0.00028797 | select * from user limit 1                                                                                |
|        9 | 0.00006671 | select * from orders right user where orders.ID=user.id                          |
|       10 | 0.00336970 | select orders*.user.id from  where orders.ID=user.id                             |
|       11 | 0.00005291 | select orders*,user.id from  where orders.ID=user.id                             |
|       12 | 0.00004725 | select orders*,user.id from  orders,user where orders.ID=user.id |
|       13 | 0.00003863 | select orders*,user.id from  orders,user where orders.ID=user.id |
|       14 | 0.00024284 | select * from orders limit 1                                                                            |
|       15 | 0.00027788 | select * from orders limit 10                                                                           |
|       16 | 0.00007312 | select * from user where user='liaoxz';select * from user where user='liaoxz'                    |
|       17 | 0.00031860 | select * from user limit 1                                                                                |
|       18 | 0.02771239 | select * from user where user_name='liaoxz'                                                               |
|       19 | 0.03121868 | select * from user where user_name='liaoxz'                                                               |
|       20 | 0.02219678 | select * from user where user_name='liaoxz'                                                               |
+----------+------------+------------------------------------------------------------------------------------------------------------------+
15 rows in set (0.00 sec)

通过指定ID查询执行时的持续时间
MariaDB [auction1]> show profile for query 20;
+----------------------+----------+
| Status               | Duration |
+----------------------+----------+
| starting             | 0.000038 |
| checking permissions | 0.000005 |
| Opening tables       | 0.000010 |
| After opening tables | 0.000004 |
| System lock          | 0.000002 |
| Table lock           | 0.000002 |
| After table lock     | 0.000004 |
| init                 | 0.000035 |
| optimizing           | 0.000011 |
| statistics           | 0.000013 |
| preparing            | 0.000008 |
| executing            | 0.000002 |
| Sending data         | 0.021981 |
| end                  | 0.000012 |
| query end            | 0.000004 |
| closing tables       | 0.000007 |
| freeing items        | 0.000006 |
| updating status      | 0.000019 |
| logging slow query   | 0.000032 |
| cleaning up          | 0.000002 |
+----------------------+----------+
20 rows in set (0.00 sec)

具体资源耗费查询(all,cpu,block io,context switch,page faults)
MariaDB [auction1_1]> show profile cpu for query 20;
+----------------------+----------+----------+------------+
| Status               | Duration | CPU_user | CPU_system |
+----------------------+----------+----------+------------+
| starting             | 0.000038 | 0.000000 |   0.000000 |
| checking permissions | 0.000005 | 0.000000 |   0.000000 |
| Opening tables       | 0.000010 | 0.000000 |   0.000000 |
| After opening tables | 0.000004 | 0.000000 |   0.000000 |
| System lock          | 0.000002 | 0.000000 |   0.000000 |
| Table lock           | 0.000002 | 0.000000 |   0.000000 |
| After table lock     | 0.000004 | 0.000000 |   0.000000 |
| init                 | 0.000035 | 0.000000 |   0.000000 |
| optimizing           | 0.000011 | 0.000000 |   0.000000 |
| statistics           | 0.000013 | 0.000000 |   0.000000 |
| preparing            | 0.000008 | 0.000000 |   0.000000 |
| executing            | 0.000002 | 0.000000 |   0.000000 |
| Sending data         | 0.021981 | 0.026852 |   0.000000 |
| end                  | 0.000012 | 0.000000 |   0.000000 |
| query end            | 0.000004 | 0.000000 |   0.000000 |
| closing tables       | 0.000007 | 0.000000 |   0.000000 |
| freeing items        | 0.000006 | 0.000000 |   0.000000 |
| updating status      | 0.000019 | 0.000000 |   0.000000 |
| logging slow query   | 0.000032 | 0.000000 |   0.000000 |
| cleaning up          | 0.000002 | 0.000000 |   0.000000 |
+----------------------+----------+----------+------------+
20 rows in set (0.00 sec)

四、常见show命令大全
sql show大全
1. show tables/show tables from database_name; -- 显示当前数据库中所有表的名称。
2. show databases; -- 显示mysql中所有数据库的名称。
3. show columns from table_name from database_name; 或show columns from database_name.table_name; -- 显示表中列名称。
4. show grants for user_name; -- 显示一个用户的权限,显示结果类似于grant 命令。
5. show index from table_name; -- 显示表的索引。
6. show variables; -- 显示系统变量的名称和值。
7. show processlist; -- 显示系统中正在运行的所有进程,也就是当前正在执行的查询。大多数用户可以查看他们自己的进程,但是如果他们拥有process权限,就可以查看所有人的进程,包括密码。
8. show table status; -- 显示当前使用或者指定的database中的每个表的信息。信息包括表类型和表的最新更新时间。
9. show privileges; -- 显示服务器所支持的不同权限。
10. show create database database_name; -- 显示create database 语句是否能够创建指定的数据库。
11. show create table table_name; -- 显示create database 语句是否能够创建指定的数据库。
12. show engines; -- 显示安装以后可用的存储引擎和默认引擎。
13. show innodb status; -- 显示innoDB存储引擎的状态。
14. show logs; -- 显示BDB存储引擎的日志。
15. show warnings; -- 显示最后一个执行的语句所产生的错误、警告和通知。
16. show errors; -- 只显示最后一个执行语句所产生的错误。
17. show [storage] engines; --显示安装后的可用存储引擎和默认引擎。

五、mysql配置文件来一套
配置文件/etc/my.cnf
[client]
port = 3306
socket = /tmp/mysql.sock
default-character-set=utf8

[mysqld]
default-time-zone = '+8:00'
server-id=9527
user=mysql

#bin-log日志相关优化参数
log-bin=mysql-master-bin
#混合模式复制
binlog_format = mixed
#存储二进制缓存
binlog_cache_size = 16M
#bin-log日志保存多长时间
expire_logs_days=7
#最大连接数
max_connections=1000
#事务提交或事务外的指令把日志写入(flush)硬盘
innodb_flush_log_at_trx_commit=1
#文件系统自动识别缓存大小是否写入磁盘
sync_binlog=0
datadir = /data/mysqldb
port = 3306
socket = /tmp/mysql.sock
#table_cache = 5000
#缓存大小设置
query_cache_size = 256M
#单个查询使用多大缓冲区
query_cache_limit = 16M
#内存表大小
max_heap_table_size = 128M
#线程池大小
thread_cache_size = 128
#慢查询超过多长时间写入日志
long_query_time = 3
#临时表大小
tmp_table_size = 128M
#设置索引缓冲区大小
key_buffer_size = 256M
#数据包大小接受设置
max_allowed_packet = 64M
#索引扫描,范围索引扫描,无索引全表扫描的表连接 缓存的大小
join_buffer_size = 16M
#排序 会话 的缓存大小
sort_buffer_size = 16M
#顺序读表缓存
read_buffer_size = 16M
#随机读缓冲区大小
read_rnd_buffer_size = 64M
#缓存innodb表的索引,数据,插入数据时的缓冲
innodb_buffer_pool_size = 6G
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
#timestamp类型的列明确的注明default值
explicit_defaults_for_timestamp=true
#禁止域名解析
skip-name-resolve
#数据库是否支持符号链接存储,1为允许
symbolic-links=0
#数据库级的字符集,对之前数据不产生影响
character-set-server=utf8mb4
#大小写铭感
lower_case_table_names=1
服务器关闭非交互连接之前等待活动的秒数
wait_timeout=180
#闭一个交互的连接之前所要等待的秒数
interactive_timeout=180



上一篇:数据库慢解决思路
下一篇:MySQL 5.6 & 5.7最优配置模板
回复

使用道具 举报

1框架
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表