线上mysql数据库爆出一个慢查询,DBA观察发现,查询时服务器IO飙升,IO占用率达到100%, 执行时间长达7s左右。...g.type_id AND t.deleted = 0 WHERE g.deleted = 0 ORDER BY g.modify_time DESC LIMIT 20 ; 【问题分析】 使用explain查看执行计划...DBA观察到的IO高,是因为sql语句生成了一个巨大的临时表,内存放不下,于是全部拷贝到磁盘,导致IO飙升。 【优化方案】 优化的总体思路是拆分sql,将排序操作和查询所有信息的操作分开。...从100%降到不到1% 在SSD机器上测试,优化前大约需要7s,优化后第一条0.3s,第二条0.1s,优化后执行速度是原来的10倍以上,IO从100%降到不到1% 可以看出,优化前磁盘io是性能瓶颈,SSD...使用explain查看执行计划,Extra列看到Using temporary就意味着使用了临时表。
查看索引 mysql> show index from tblname; mysql> show keys from tblname; · Table 表的名称。...在MySQL中,有值‘A’(升序)或NULL(无分类)。 · Cardinality 索引中唯一值的数目的估计值。通过运行ANALYZE TABLE或myisamchk -a可以更新。...基数越大,当进行联合时,MySQL使用该索引的机 会就越大。 · Sub_part 如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。
1.使用iftop可以查看网络使用情况,安装: yum install iftop iftop -n 2.使用iotop可以查看磁盘io使用情况,安装: yum install iotop iotop...按p键可以将TID变为PID,按o键可以将当前活跃的显示出来而不是显示所有进 3.监控io性能 iostat -x 磁盘使用
登录该服务器后通过 iostat -x 1 10 查看了相关磁盘使用信息。...由上图可知,vdb磁盘的 %util【IO】几乎都在100%,原因是频繁的读取数据造成的。...await:平均每次IO请求等待时间。(包括等待队列时间和处理时间,毫秒为单位) r_await:平均每次IO读请求等待时间。...通过这个命令可以看见比较详细信息,如:进程号,磁盘读取量,磁盘写入量,IO百分比,涉及到的命令是什么「两个都是 grep 命令造成的IO读取量大」。...可见其中 grep 命令占用了大量的读IO,之后可根据 PID 查看相关进程信息。 说明:本图与上图的PID不同,原因是上图涉及的进程执行完了,本图是之后执行产生的进程【都执行的同一个脚本】。
距离MySQL 5.6正式发布已经有比较长的时间了,目前Oracle官网上的最新GA版本MySQL server也为5.6。...由于VPS仅有1GB内存,在开启常用的Web服务之后,无力再为MySQL提供400MB以上的物理内存。...通过网络爬文,MySQL 5.6相比于前代GA版本性能提升显著,但默认缓存设置对于小型站点并不合理。...默认my.ini文件位置:C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.6 修改参数: performance_schema_max_table_instances...=400 table_definition_cache=400 table_open_cache=256 保存之后重新启动MySQL服务,其内存占用即可从400MB以上降低至40MB左右。
◆ CPU 占用过高常见现象 在使用 MySQL 的过程中会遇到各种瓶颈问题,常见的是 IO 瓶颈,但是有时候会出现服务器 CPU 使用率超过 100%,应用页面访问慢,登录服务器负载很高。...◆ 检查服务器线程 方法一: top -H -p 先通过 top 找出占用 CPU 使用率 100% 的 MySQL 进程 32232,在具体查看该进程下的线程情况。...◆ 查看 MySQL 进程 在 MySQL 中看看当前连接是否有什么异常。...0 rows affected (0.05 sec) 到目前为止,介绍了几种常用的 MySQL 占用 CPU 过高的定位方法,你是否掌握了。...◆ 优化一下也不难 前面介绍了几种常用的排查 MySQL 占用 CPU 过高问题排查的方法,那么当我们遇到问题了,如何解决,如何优化呢?
Mysql占用CPU过高的时候,该从哪些方面下手进行优化?...占用CPU过高,可以做如下考虑: 1)一般来讲,排除高并发的因素,还是要找到导致你CPU过高的哪几条在执行的SQL,show processlist语句,查找负荷最重的SQL语句,优化该SQL,比如适当建立某字段的索引...; 2)打开慢查询日志,将那些执行时间过长且占用资源过多的SQL拿来进行explain分析,导致CPU过高,多数是GroupBy、OrderBy排序问题所导致,然后慢慢进行优化改进。...的sql语句睡眠连接超时时间设置问题(wait_timeout) 14)使用show processlist查看mysql连接数,看看是否超过了mysql设置的连接数(http://www.cnblogs.com...可以将mysql全局变量wait_timeout的缺省值改大。 查看mysql手册,发现对wait_timeout的最大值分别是24天/365天(windows/linux)。
前言 如需查看MySQL的登录日志,首先要确认开启了general_log general_log会记录所有的SQL操作,一般不建议开启。...内容 查看general_log日志是否开启和存放目录 show global variables like '%general%'; 默认是以文件输出的,不输出到表格中。...查看登录日志信息 tail -f xxxxxx.log | grep "Connect" 开启general_log set global general_log=on;
下面会用到information_schema的tables来进行统计,首先进入 use information_schema; 查看data_length : 记录表的大小(单位字节) select...concat(round(sum(data_length/1024*1024*1024),2),'G') as data from tables; 查看表的大小,按指定的库名和表名 select concat...DATA_LENGTH/1024*1024*1024),2),'G') as data from TABLES where table_schema='库名' and table_name='表名'; 查看指定的数据库大小...select concat(round(sum(DATA_LENGTH/1024*1024*1024),2),'G') as data from TABLES where table_schema='库名'; 查看所有表大小并排序
# 1.查看所有数据库容量大小 select table_schema as '数据库', sum(table_rows) as '记录数', sum(truncate(data_length/1024...information_schema.tables group by table_schema order by sum(data_length) desc, sum(index_length) desc; # 2.查看所有数据库各表容量大小...2) as '索引容量(MB)' from information_schema.tables order by data_length desc, index_length desc; # 3.查看...index_length/1024/1024, 2)) as '索引容量(MB)' from information_schema.tables where table_schema='demo'; # 4.查看
记一次linux下较重要的几项负载信息查看方式 1.cpu、memory负载 root@test:~$ top #top命令,可以查看 cpu 及 memory 的使用及负载情况 top - 09:34...:32.65 rcu_sched 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 在top下按“1”查看...CPU核心数量,shift + p :按cpu使用率大小排序,shif + m 按内存使用率高低排序 2.io负载 root@test:~$ iostat -x #iostat 命令可以查看io负载情况
COMMAND:进程启动命令名称 常用的命令: P:按%CPU使用率排行 T:按TIME+排行 M:按%MEM排行 /proc/pid目录 获取程序pid lsof -i:3306 假如我获取的mysql...的pid为3779 那么获取内存使用情况 cat /proc/3779/status | grep VmRSS 我们可以进入这个目录查看可用信息 cd /proc/3779/ ls -l 常用(N为进程的...查看swap free -h 或者 cat /proc/swaps 3) 查看某个程序的内存占用 获取程序pid lsof -i:3306 或者 ps -aux | grep mysqld 假如我获取的...mysql的pid为3779 那么获取内存使用情况 cat /proc/3779/status | grep VmRSS 或者 top -p 3779 CPU 消耗CPU前10排序的进程 ps aux...| sort -k3nr |head -n 10 查看CPU占用 排序 top 然后按 P IO 每隔1s查询一次 共查询10次 iostat 1 10 路由信息 查看主机路由信息 netstat -
为了获取IO来源,在slave机上部署mysqld实例监控,以及iotop采集监控,获取对应时间段更详细的相关信息,抓取对应时间段进行IO写入的进程(线程),同时观察对应时间段mysql实例状态。...这段时间内的较大IO写入线程号为:(截取部分记录) 时间 线程号 进程名 读取速度 写入速度 00:07:34 145378 be/4 mysql201 139.10 K/s 263111.57 K/s...一个slave mysql读取relay log进行日志回放,首先想到回放执行语句,可能由此引发下列写入IO: mysql server binlog日志记录,即回放过程中语句写入的本地binlog。...为了印证这个写入来源,继续在innodb层添加日志跟踪,对于idb文件扩展加入以下逻辑进行日志跟踪: 每100MB扩展数据量,查看累计时间,如果累计时间在1秒以内,打印一条warning日志,且sleep...查看对应时间段新增日志(+8为北京时间), ?
一、排查有没有地方占用SQL资源过多 1、排查方法 : > mysql -uroot -p #登陆数据库 >******** #输入数据库密码 2、查看数据库...; 三、mysql中的wait_timeout坑 mysql> show variables like '%timeout%'; 首先解释一下: wait_timeout — 指的是mysql在关闭一个非交互的连接之前所要等待的秒数...MySQL 的默认设置下,当一个连接的空闲时间超过8小时后,一到高峰期肯定会造成,会有太多的TCP连接没关闭,数据库连接数肯定是不够。从而会产生CPU占用过高,服务器告警等问题。... #增加以上两列即可,因为官方文档要求修改此参数必须同时修改interactive_timeout 1.2、重启数据库 service mysqld restart 1.3、查看数据库参数是否修改成功... 连接MySQL 然后查看 show variables like ‘wait_timeout’; 2、第二种修改方式 不需重启MySQL mysql> show variables like
介绍下linux的3个常用I/O相关命令,解决I/O压力过大问题时很有用 iostat 查看磁盘的I/O状态 iotop 查看I/O进程排名 lsof 查看系统或进程打开的文件列表 (1)iostat...我们可以清楚地知晓是什么程序在读写磁盘,速度以及命令行,pid 等信息 iotop不是系统自带的命令,需要安装,例如centos下 yum install iotop 主要选项 -o 只显示有io
有时候需要查看一下二进制的日志文件,也就是binlog日志,那么这些命令都是怎么样的呐,作者通过摸索。...'; # 查看当前的二进制日志状态 show master status; #列表展示二进制文件 show binary logs; #查看二进制文件内容 mysqlbinlog.exe --no-defaults...\data\binlog.000121 | more 这里主要演示一下,查看特定二进制日志的效果。作者通过查询资料,发现二进制文件有statement模式和row模式,如下所示是row模式。...于是就用mysqlbinlog.exe来查看。 mysqlbinlog是可以按时间来查看的,但是作者在window平台下查看的时候发现日期错误,让人很是无语。索性把时间删了,然后显示为正序。...作者初步的根据自己的感觉,图中的时间应该是我们所要的查看的时间范围,但是作者尝试之后发现也不对,目前还不知道这个时间是如何怎么填写。但是xid可以作为我们查阅具体的sql指令的一个标志。
今天听到看部门同事有遇到IO过高的问题 , 简单的查询了下 ? iostat命令: %user:CPU处在用户模式下的时间百分比。 %nice:CPU处在带NICE值的用户模式下的时间百分比。...如果%iowait的值过高,表示硬盘存在I/O瓶颈 如果%idle值高,表示CPU较空闲 如果%idle值高但系统响应慢时,可能是CPU等待分配内存,应加大内存容量。...因此基本思路就是: 尽量避免磁盘的随机IO , 尽量利用磁盘预读缓存 , 利用局部性原理 尽可能地顺序读写一个文件 单进程读写硬盘 避免对大目录操作 把小文件的读写转换为大文件的写
SHOW BINLOG EVENTS mysql> use testxxx; Reading table information for completion of table and column names...You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables;...| hello98 | | 99 | hello99 | | 100 | hello100 | +------+----------+ 99 rows in set (0.01 sec) mysql...> delete from test where id=100; Query OK, 1 row affected (0.10 sec) mysql> SHOW BINLOG EVENTS; +---...> 再更新一条数据 mysql> update test set name = 'change99' where id=99; Query OK, 1 row affected (0.03 sec)
Linux下如何查看MySQL端口?MySQL的端口默认为3306,但是在安装过程中有可能修改了MySQL端口,下面为大家分享一下Linux下查看MySQL端口具体方法。...1、登录mysql [root@localhost ~]# mysql -uroot -pEnter password: 输入数据库密码; 2、使用show global variables like...‘port’; 命令查看端口号, mysql> show global variables like ‘port’;+—————+——-+| Variable_name | Value |+—————+...——-+| port | 3306 |+—————+——-+1 row in set (0.00 sec) mysql> 3306即为端口号。...二、mysql端口号的修改 1、编辑/etc/my.cnf文件 [root@localhost ~]# vi /etc/my.cnf 2、添加port=2032; 3、重启mysql [root@localhost
MySQL的binlog日志位置可通过show variables like '%datadir%';查看,直接打开无法查看,要看其内容2个办法: 1、登录到mysql查看binlog 只查看第一个binlog...文件的内容 mysql> show binlog events; 查看指定binlog文件的内容 mysql> show binlog events in 'mysql-bin.000002'; mysql...------------+-----------+-------------+-----------------------------------------------------------+ 查看当前正在写入的...+------------------+-----------+ 2 rows in set (0.00 sec) 2、用mysqlbinlog工具查看 基于开始/结束时间 [root@hd3 ~].../mysql-bin.000001 基于pos值,注:hadoop是库名,/var/lib/mysql/mysql-bin.000001是二进制文件路径 [root@hd3 ~]# mysqlbinlog