# uname -uM
IBM,7029-6E3 IBM,01100550A
2、检查系统硬件设备故障灯是否有亮
3、系统错误报告
# errpt -d H -T PERM //硬件的错误报告
IDENTIFIER TIMESTAMP T C RESOURCE_NAME DESCRIPTION
BFE4C025 0530085308 P H sysplanar0 UNDETERMINED ERROR
BFE4C025 0529091308 P H sysplanar0 UNDETERMINED ERROR
# errpt -d S -T PERM //软件的错误报告
# errpt -aj *******|more //具体的错误信息
# errpt -d H -T PERM>/tmp/hwerror.log //可以把错误的报告存成一个文件
4、有否给 root 用户的错误报告
Mail [5.2 UCB] [AIX 5.X] Type ? for help.
"/var/spool/mail/root": 5 messages 3 new 5 unread
U 1 root Thu May 15 09:53 24/884 "diagela message from p615"
U 2 root Fri May 16 04:07 24/884 "diagela message from p615"
>N 3 root Sat May 24 13:08 23/874 "diagela message from p615"
5、检查 hacmp.out, smit.log, bootlog 等
# lssrc -g cluster/#>lssrc -g cluster
Subsystem GroupPID Status
clstrmgrES cluster 16334active
一般上 hacmp.out 的位置: /usr/sbin/cluster/ 或者 /tmp/
然后找到最近的 hacmp.out 文件,察看有没有错误信息
6、文件系统检查
# df -k
Filesystem1024-blocks Free %UsedIused %Iused Mounted on
/dev/hd4 131072101568 23% 2268 4% /
/dev/hd2 1441792 31256 98%3605611% /usr
/dev/hd9var131072117048 11% 418 2% /var
看看有没有超过 90% 使用率的,建议用户改善
7、逻辑卷有否 "stale" 的状态
# lsvg -l rootvg
LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT
hd5 boot 1 1 1closed/syncd N/A
hd6 paging 4 4 1open/syncdN/A
hd8 jfslog 1 1 1open/syncdN/A
hd4 jfs1 1 1open/syncd/
hd2 jfs11111open/syncd/usr
hd9var jfs1 1 1open/syncd/var
如果系统还有其他卷组,也需要察看
8、内存交换区的使用率是否超过 70%
# lsps -a
Page Space Physical Volume Volume GroupSize %Used Active Auto Type
hd6 hdisk0rootvg 512MB 1 yes yeslv
9、系统性能是否有瓶颈
# topas
# vmstat 1 10
kthrmemory page faultscpu
----- ----------- ------------------------ ------------ -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
0 0 110029 408618 0 0 0 00 0 4 602 75 0 1 99 0
0 0 110031 408616 0 0 0 00 0 1 562 54 1 0 99 0
0 0 110031 408616 0 0 0 00 0 3 628 84 0 0 99 0
# iostat 1 10
tty: tin toutavg-cpu: % user % sys % idle % iowait
0.0394.00.0 0.0 100.0 0.0
Disks:% tm_act Kbps tpsKb_read Kb_wrtn
hdisk0 0.0 0.0 0.0 0 0
hdisk1 0.0 0.0 0.0 0 0
cd0 0.0 0.0 0.0 0 0
10、网络与通讯检查
# ifconfig -a
# netstat -in
Name Mtu Network AddressIpkts IerrsOpkts Oerrs Coll
en0 1500 link#2 0.9.6b.3e.6.ac1964 0 534 0 0
en0 1500 192.168.0 192.168.0.11 1964 0 534 0 0
lo0 16896 link#1 267 0 413 0 0
lo0 16896 127 127.0.0.1 267 0 413 0 0
# netstat -rn //察看路由情况
Routing tables
Destination Gateway Flags Refs Use If Exp Groups
Route Tree for Protocol Family 2 (Internet):
127/8127.0.0.1 U 7 142 lo0 - -
192.168.0.0 192.168.0.11 UHSb 0 0 en0 - - =>
# vi /etc/hosts //察看 hosts 文件有否特殊的定义
# ping ****
#lsattr -El inet0 //路由的检测
authm 65536 Authentication Methods True
hostname h24 Host NameTrue
gateway Gateway True
route net,,0,172.16.23.81 RouteTrue
bootup_option no Serial Optical Network Interface True
rout6 FDDI Network Interface True
11、有否符合要求的系统备份
第一次去可以先询问客户关于备份的策略
# ls -l /image.data //看看系统有没有备份的 image 文件,记录最后备份日期
-rw-r--r-- 1 root system 9600 May 19 17:31 /image.data
# lsvg -l rootvg //察看有否符合要求的数据备份和保护
LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT
hd4 jfs1 1 1open/syncd/
hd2 jfs11111open/syncd/usr
hd10opt jfs1 1 1open/syncd/opt
oraclelvjfs2 80160 1open/syncd/oracle
loglv00 jfs2log1 1 1open/syncdN/A
testlv jfs10201closed/syncd /tmp/test
如何察看数据保护方式 RAID10/RAID5,RAID 的Hotspare 属性是否打开
#smitty ssaraid? Change/Show Attributes of an SSA RAID Array
检查Enable Use of Hot Spares属性是否为YES
12、系统 Dump 设置是否正确
# sysdumpdev -l
primary /dev/hd6
secondary/dev/sysdumpnull
copy directory /var/adm/ras
forced copy flag TRUE
always allow dumpFALSE
dump compression OFF
# sysdumpdev P p /dev/hd6 s /dev/sysdumpnull
# sysdumpdev -P -c
13、HACMP 测试
# /usr/sbin/cluster/diag/clconfig -v '-tr' // Cluster Verification 输出结果无Fail
# /lssrc -g cluster
14、maxpout, minpout 系统参数
如果系统中运行了HACMP
smitty chgsysy,将High/Low water mark从0/0修改为33/24
# lsattr -El sys0|grep maxpout
//maxpout 用途: 对文件指定未决 I/O 的最大数目
值: 缺省值:0(不检查);范围:0 到 n(n 应该是 4 的倍数加 1)
# lsattr -El sys0|grep minpout
//指定一个基点,在该基点处,已达到 maxpout 的程序可以继续写入文件
值: 缺省值:0(不检查);范围:0 到 n(n 应该是 4 的倍数,且大于或等于 4 小于 maxpout)
15、syncd 参数
# grep syncd /sbin/rc.boot //sync() 被 syncd 调用的间隔时间
nohup /usr/sbin/syncd 10 >/dev/null 2>&1 &
值: 缺省值:60;范围:1 到任何正整数
显示: grep syncd /sbin/rc.boot 或 vi /sbin/rc.boot
更改: 更改在下次引导后有效,而且是永久有效。备用方法是使用命令 kill 来终止守护程序
syncd 并用命令 /usr/sbin/syncd interval 从命令行重新启动它。
诊断: 当 syncd 正在运行时,文件的 I/O 被阻塞了。
调整: 在缺省级别上,这个参数几乎不影响性能。不推荐对这个参数进行更改。为了保持数据完整
性对于 HACMP而使 syncd interval 明显缩小,会导致性能下降。
更改命令为:
#vi /sbin/rc.boot
16、aio 参数 //异步 I/O 可调参数
# lsdev -C|grep aio
察看状态是否是 available
# lsattr -El aio0
minservers 1 MINIMUM number of serversTrue
maxservers 10MAXIMUM number of serversTrue
maxreqs4096 Maximum number of REQUESTS True
kprocprio 39Server PRIORITY True
autoconfig available STATE to be configured at system restart True
fastpath enableState of fast path True
# smit aio //可以更改参数
17、检查 errdaemon, srcmstr 是否正常运行
# ps -ef|grep err
# ps -ef|grep src
18、 系统硬件诊断
# diag
->Diagnostic Routines
->System Verification
->All Resources
->F7 或者 Esc+7
19、补丁程序 PTF 是否满足要求,当前系统补丁版本
#oslevel -r
5300-04
#instfix -i|grep
All filesets for 5.3.0.0_AIX_ML were found.
All filesets for 5300-01_AIX_ML were found.
All filesets for 5300-02_AIX_ML were found.
All filesets for 5300-03_AIX_ML were found.
All filesets for 5300-04_AIX_ML were found.
All filesets for 5300-05_AIX_ML were found.
# lscfg -vp //检查所有设备的微码
20、收集系统信息放到/tmp/ibmsupt
# snap -ac //运行#snap -ac,生成文件snap+s/n.pax.Z
你可以在每台服务器上面放同一个脚本。
这个linux脚本加入cron,这个脚本每天定时把df -k free -m uptime 这三项的结果保存到文本文件里面,比如uptime可以保存到uptime_20140112.txt,以此类推。
然后脚本把这些文件ftp到一个单独的服务器上面,比如192.168.1.100,这个服务器可以是windows。
然后写个程序读当天或者几天的txt文件,然后输出到excel。可以用你熟悉的语言来写,应该不难。
我们先来看第一个阶段,MySQL慢的诊断思路,一般我们会从三个方向来做:
第一个方向是MySQL内部的观测
第二个方向是外部资源的观测
第三个方向是外部需求的改造
1.1 MySQL 内部观测
我们来看MySQL内部的观测,常用的观测手段是这样的,从上往下看,第一部分是Processlist,看一下哪个SQL压力不太正常,第二步是explain,解释一下它的执行计划,第三步我们要做Profilling,如果这个SQL能再执行一次的话, 就做一个Profilling,然后高级的DBA会直接动用performance_schema ,MySQL 5.7 以后直接动用sys_schema,sys_schema是一个视图,里面有便捷的各类信息,帮助大家来诊断性能。再高级一点,我们会动用innodb_metrics进行一个对引擎的诊断。
除了这些手段以外,大家还提出了一些乱七八糟的手段,我就不列在这了,这些是常规的一个MySQL的内部的状态观测的思路。除了这些以外,MySQL还陆陆续续提供了一些暴露自己状态的方案,但是这些方案并没有在实践中形成套路,原因是学习成本比较高。
1.2 外部资源观测
外部资源观测这部分,我引用了一篇文章,这篇文章的二维码我贴在上面了。这篇文章是国外的一个神写的,标题是:60秒的快速巡检,我们来看一下它在60秒之内对服务器到底做了一个什么样的巡检。一共十条命令,这是前五条,我们一条一条来看。
1.uptime,uptime告诉我们这个机器活了多久,以及它的平均的负载是多少。
2.dmesg -T | tail,告诉我们系统日志里边有没有什么报错。
3.vmstat 1,告诉我们虚拟内存的状态,页的换进换出有没有问题,swap有没有使用。
4. mpstat -P ALL,告诉我们CPU压力在各个核上是不是均匀的。
5.pidstat 1,告诉我们各个进程的对资源的占用大概是什么样子。
我们来看一下后五条:
首先是iostat-xz 1,查看IO的问题,然后是free-m内存使用率,之后两个sar,按设备网卡设备的维度,看一下网络的消耗状态,以及总体看TCP的使用率和错误率是多少。最后一条命令top,看一下大概的进程和线程的问题。
这个就是对于外部资源的诊断,这十条命令揭示了应该去诊断哪些外部资源。
1.3 外部需求改造
第三个诊断思路是外部的需求改造,我在这里引用了一篇文档,这篇文档是MySQL的官方文档中的一章,这一章叫Examples of Common Queries,文档中介绍了常规的SQL怎么写, 给出了一些例子。文章的链接二维码在slide上。
我们来看一下它其中提到的一个例子。
它做的事情是从一个表里边去选取,这张表有三列,article、dealer、price,选取每个作者的最贵的商品列在结果集中,这是它的最原始的SQL,非常符合业务的写法,但是它是个关联子查询。
关联子查询成本是很贵的,所以上面的文档会教你快速地把它转成一个非关联子查询,大家可以看到中间的子查询和外边的查询之间是没有关联性的。
第三步,会教大家直接把子查询拿掉,然后转成这样一个SQL,这个就叫业务改造,前后三个SQL的成本都不一样,把关联子查询拆掉的成本,拆掉以后SQL会跑得非常好,但这个SQL已经不能良好表义了,只有在诊断到SQL成本比较高的情况下才建议大家使用这种方式。
为什么它能够把一个关联子查询拆掉呢?
这背后的原理是关系代数,所有的SQL都可以被表达成等价的关系代数式,关系代数式之间有等价关系,这个等价关系通过变换可以把关联子查询拆掉。
上面的这篇文档是一个大学的教材,它从头教了关于代数和SQL之间的关系。然后一步步推导怎么去简化这句SQL。
第一,MySQL本身提供了很多命令来观察MySQL自身的各类状态,大家从上往下检一般能检到SQL的问题或者服务器的问题。
第二,从服务器的角度,我们从巡检的脚本角度入手,服务器的资源就这几种,观测手法也就那么几种,我们把服务器的资源全部都观察一圈就可以了。
第三,如果实在搞不定,需求方一定要按照数据库容易接受的方式去写SQL,这个成本会下降的非常快,这个是常规的MySQL慢的诊断思路。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)