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

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Oracle 11g R2 备份与恢复
Oracle11gR2Rman备份 1.备份与恢复的定义及分类 备份的定义及分类: 备份就是把数据库复制到转储设备的过程。其中,转储设备是指用于放置数据库副本的磁带或磁盘。通常也将存放于转储设备中的数据库的副本称为原数据库的备份或转储。备份是一份数据副本,从不同的角度分类如下: 从物理与逻辑的角度来分类: 从物理与逻辑的,备份可以分为物理备份和逻辑备份。 物理备份:对数据库操作系统的物理文件(数据文件,控制文件和日志文件)的备份。物理备份又可以分为脱机备份(冷备份)和联机备份(热备份),前者是在关闭数据库的时候进行的,后者是以归档日志的方式对运行的数据库进行备份。可以使用oracle的恢复管理器(RMAN)或操作系统命令进行数据库的物理备份。 逻辑备份:对数据库逻辑组件(如表和存储过程等数据库对象)的备份。逻辑备份的手段很多,如传统的EXP,数据泵(EXPDP),数据库闪回技术等第三方工具,都可以进行数据库的逻辑备份。 从数据库的备份角度分类: 从数据库的备份角度,备份可以分为完全备份和增量备份和差异备份 完全备份:每次对数据库进行完整备份,当发生数据丢失的灾难时,完全备份无需依赖其他...
- 下一篇
zabbix监控实践解析(历史记录附近乱码、图表显示乱码)
在很早以前就了解过一些开源的监控工具,例如nagios、ganglia、cacti、zabbix,目前zabbix好像更受欢迎一点,我们所有的业务主要在阿里云上,平时主要用的阿里云的一些监控,随着业务的发展,想着将监控这一部分具体完善一下,所以就选择了zabbix,在使用的过程中也遇到了一些问题,在此记录,供以后参考。 环境:lamp (centos 6.5 + apache2+mysql5.1+php) zabbix版本:2.4.8 问题一、语言设置中文后乱码 如图上面的历史记录部分是乱码的,这个主要是我们创建数据库以及初始化时,选择的字符集不合适,这里需要注意是当我们初次安装的时候,创建数据库字符集一定要选择为UTF8,这样整体后期就不会出现乱码。 检查数据库字符集 1.查看当前的默认字符集 mysql>showcreatedatabasezabbix; +----------+-------------------------------------------------------------------+ |Database|CreateDatabase| +----...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池