linux+ mysql +tomcat+ java
一个sql 发现单个不慢, 但若干个线程同时执行
发现 io 好大, 开发人员检测得知 我如何知道 一个sql 的io很大 ?? (sqlserver执行计划可以看到, 但mysql好像看不到??? 这个sql 有5个表join 还带一个exist,另外返回120多行数据)
一个sql 发现单个不慢, 但若干个线程同时执行
发现 io 好大, 开发人员检测得知 我如何知道 一个sql 的io很大 ?? (sqlserver执行计划可以看到, 但mysql好像看不到??? 这个sql 有5个表join 还带一个exist,另外返回120多行数据)
解决方案 »
- 大数据量导入mysql
- 请问大家一个问题啊,我想做软件,即从网上下载下的文章可以放到服务器中,所以数据库的检索量是相当大的,现在我想问的是应该使用什么样的数据库?(这个可能存放上百万的
- 用存储过程 拆分字段
- 为什么用optimize优化表却提示 Table does not support optimize, doing recreate + ...
- 请教一个MYSQL 取日期的问题
- MySql的UNION ALL相同条件的问题?
- Win下面的MySql数据库和Linux下的MySql数据库能不能通用?
- linux下安装5.0.15版本,怎么没有my.cnf文件?
- mySql里面查询:Select '省份:'+province+'城市:'+city+'街道'+street from t1 ???
- 不用Drop column,可以将指定列改回非unique不?
- MySQL4.0中timestamp的用法,在线等,谢谢。
- MySQL集群 和MySQL主从复制的区别
如果是的话,那是比较正常的(当然也有可能sql语句不够优化扫描过多的IO)非第一次执行?
如果是的话,那得跟踪检查sql语句是否够优化了
PS: linux下有很多工具跟踪io变化的
我的linux 版本没有 iostat
只有vmstat 来查看 , 如何利用这个来查
用vmstat查看结果如下
# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- -
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 132 87052 27580 12361748 0 0 7 98 0 0 1 7 91 1 0
]# ---------------------困惑这些数据到底表示什么 如何理解??
比较那个sql 在前后执行的磁盘io情况就可以分析得到 。
vmstat命令列出的属性详解Procsr: 等待运行的进程数 b: 处在非中断睡眠状态的进程数 w: 被交换出去的可运行的进程数。此数由 linux 计算得出,但 linux 并不耗尽交换空间Memoryswpd: 虚拟内存使用情况,单位:KBfree: 空闲的内存,单位KBbuff: 被用来做为缓存的内存数,单位:KBSwapsi: 从磁盘交换到内存的交换页数量,单位:KB/秒so: 从内存交换到磁盘的交换页数量,单位:KB/秒IObi: 发送到块设备的块数,单位:块/秒bo: 从块设备接收到的块数,单位:块/秒Systemin: 每秒的中断数,包括时钟中断cs: 每秒的环境(上下文)切换次数CPU按 CPU 的总使用百分比来显示us: CPU 使用时间sy: CPU 系统使用时间id: 闲置时间准测r<5,b≈0,
如果fre<MINFREE,将会出现连续不断的页面调度,将导致系统性能问题。
对于page列,re,pi,po,cy维持于比较稳定的状态,PI率不超过5,如果有pagin发生,那么关联页面必须先进行pageout
在内存相对紧张的环境下pagein会强制对不同的页面进行steal操作。如果系统正在读一个大批的永久页面,你也许可以看到po和pi列
会出现不一致的增长,这种情景并不一定表明系统负载过重,但是有必要对应用程序的数据访问模式进行见检查。在稳定的情况下,扫描率和重置率几乎相等,在
多个进程处理使用不同的页面的情况下,页面会更加不稳定和杂乱,这时扫描率可能会比重置率高出。faults列,in,sy,cs会不断跳跃,这里没有明确的限制,唯一的就是这些值最少大于100cpu列,us,sys,id和wa也是不确定的,最理想的状态是使cpu处于100%工作状态,单这只适合单用户的情况下。
如果在多用户环境中us+sys》80,进程就会在运行队列中花费等待时间,响应时间和吞吐量就会下降。wa>40表明磁盘io没有也许存在不合理的平衡,或者对磁盘操作比较频繁,
vmstat各项:
procs:
r-->在运行队列中等待的进程数
b-->在等待io的进程数
w-->可以进入运行队列但被替换的进程
memoy
swap-->现时可用的交换内存(k表示)
free-->空闲的内存(k表示)
pages
re--》回收的页面
mf--》非严重错误的页面
pi--》进入页面数(k表示)
po--》出页面数(k表示)
fr--》空余的页面数(k表示)
de--》提前读入的页面中的未命中数
sr--》通过时钟算法扫描的页面
disk 显示每秒的磁盘操作。 s表示scsi盘,0表示盘号
fault 显示每秒的中断数
in--》设备中断
sy--》系统中断
cy--》cpu交换
cpu 表示cpu的使用状态
cs--》用户进程使用的时间
sy--》系统进程使用的时间
id--》cpu空闲的时间
如果 r经常大于 4 ,且id经常少于40,表示cpu的负荷很重。
如果pi,po 长期不等于0,表示内存不足。
如果disk 经常不等于0, 且在 b中的队列 大于3, 表示 io性能不好。Linux在具有高稳定性、可靠性的同时,具有很好的可伸缩性和扩展性,能够针对不同的应用和硬件环境调整,优化出满足当前应用需要的最佳性能。因此企业在维护Linux系统、进行系统调优时,了解系统性能分析工具是至关重要的。
在Linux下有很多系统性能分析工具,比较常见的有top、free、ps、time、timex、uptime等。下文将介绍几个较为重要的性能分析工具vmstat、iostat和sar及其使用。 用vmstat监视内存使用情况 vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监视。它是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。 vmstat的语法如下:
vmstat [-V] [-n] [delay [count]] 其中,-V表示打印出版本信息;-n表示在周期性循环输出时,输出的头部信息仅显示一次;delay是两次输出之间的延迟时间;count是指按照这个时间间隔统计的次数。对于vmstat输出各字段的含义,可运行man vmstat查看。 用iostat监视I/O子系统情况 iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。 iostat的语法如下:
iostat [ -c | -d ] [ -k ] [ -t ] [ -V ] [ -x [ device ] ] [ interval [ count ] ] 其中,-c为汇报CPU的使用情况;-d为汇报磁盘的使用情况;-k表示每秒按kilobytes字节显示数据;-t为打印汇报的时间;-v表示打印出版本信息和用法;-x device指定要统计的设备名称,默认为所有的设备;interval指每次统计间隔的时间;count指按照这个时间间隔统计的次数。 iostat一般的输出格式如下:
Linux 2.4.18-18smp (builder.linux.com) 2003年03月07日 avg-cpu: %user %nice %sys %idle 4.81 0.01 1.03 94.15 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtndev3-0 30.31 1117.68 846.52 16104536 12197374dev3-1 7.06 229.61 40.40 3308486 582080
对于输出中各字段的含义,iostat的帮助中有详细的说明。 使用sar进行综合分析 表1 sar参数说明 选项 功能 -A 汇总所有的报告 -a 报告文件读写使用情况 -B 报告附加的缓存的使用情况 -b 报告缓存的使用情况 -c 报告系统调用的使用情况 -d 报告磁盘的使用情况 -g 报告串口的使用情况 -h 报告关于buffer使用的统计数据 -m 报告IPC消息队列和信号量的使用情况 -n 报告命名cache的使用情况 -p 报告调页活动的使用情况 -q 报告运行队列和交换队列的平均长度 -R 报告进程的活动情况 -r 报告没有使用的内存页面和硬盘块 -u 报告CPU的利用率 -v 报告进程、i节点、文件和锁表状态 -w 报告系统交换活动状况 -y 报告TTY设备活动状况 sar是System Activity Reporter(系统活动情况报告)的缩写。顾名思义,sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据;取样数据和分析的结果都可以存入文件,所需的负载很小。sar是目前Linux上最为全面的系统性能分析工具之一,可以从14个大方面对系统的活动进行报告,包括文件的读写情况、系统调用的使用情况、串口、CPU效率、内存使用状况、进程活动及IPC有关的活动等,使用也是较为复杂。 sar的语法如下:
sar [-option] [-o file] t [n] 它的含义是每隔t秒取样一次,共取样n次。其中-o file表示取样结果将以二进制形式存入文件file中。 另一种语法如下:
sar [-option] [-s time] [-e time] [-i sec] [-f file] 含义是表示从file文件中取出数据,如果没有指定-f file,则从标准数据文件/var/adm/sa/sadd取数据,其中dd表示当前天。另外,-s time表示起始时间;-e time表示停止时间;-i sec表示取样的时间间隔,如果不指定则表示取文件中所有的数据。对于具体的选项参见表1。 一般它与-q和-u联合使用,以便对每个CPU的使用情况进行分析,比如运行如下命令:
sar -q -u 5 1 将输出如下:
Linux 2.4.18-18smp (builder.linux.com) 2003年03月07日 09时46分16? CPU %user %nice %system %idle09时46分21? all 0.20 0.00 0.00 99.80 09时46分16? runq-sz plist-sz ldavg-1 ldavg-509时46分21? 0 91 0.00 0.00 Average: CPU %user %nice %system %idleAverage: all 0.20 0.00 0.00 99.80 Average: runq-sz plist-sz ldavg-1 ldavg-5Average: 0 91 0.00 0.00
由于sar命令太复杂,只有通过熟练使用才能了解每个选项的含义,对于sar输出中每个字段的含义运行man sar命令可以得到详细的解释