大家读过古龙先生的七种武器吗?他们各有各的妙用,各有各的人生道理在其中。DB2中也有这么七种武器,它们也是用途不同,用好了威力无穷。
俺所谓的七种武器就是DB2的七个命令:
第一种,霸王枪,db2pd。
db2pd是一件真正的神器,许多DBA包括俺,就靠它活着了。它主要用于检查DB2某方面的状态和诊断DB2的问题,它来源于informix数据库的onstat工具,IBM收了informix后,从DB2的V8版本开始被引入,它最大的特点是直接从实例和数据库的共享内存中取所需数据,由于不需要获取latches和引擎资源就能干活,因此db2pd可以近似认为不会对系统性能产生影响,相当于是一个走后门不按常理出牌的冬冬,DB2中走后门的工具不只它一个,比如load工具。
它是咋样实现直接去共享内存中取数的嗫?熟悉开发的程序猿或媛们一下就能猜到了吧,就是利用了shmget()、shmat()、shmctl()这些函数呗,在Linux中用strace,AIX中用truss命令就可以跟踪的到,比方说Linux:
db2inst1@susea:~/sqllib> strace db2pd -db sample -app
-- 结果好多啊,看一下它的输出,这些函数调用暴露无疑。
…
shmget(0xbc789261, 0, 0700) = 60522498
shmctl(60522498, IPC_64|IPC_STAT, 0xbfe93ac4) = 0
shmat(60522498, 0x10000000, 0) = 0x10000000
mmap2(NULL, 16842752, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xaec92000
shmat(69304326, 0xa5920000, 0) = 0xa5920000
shmat(69271557, 0xaade0000, 0) = 0xaade0000
…
-- strace和truss是OS提供的问题诊断的工具,你了解的越多越好啦。
尽管db2pd无比强大,但是它也有让人头痛的地方,比方说,由于没有锁定,它提供的数据偶尔不太靠谱;它还必须在服务器端执行;截止到V95版本,db2pd拥有50多个参数,闹心的是每个小版本提供的参数都不一样,你打一个补丁,说不定就打出来一个db2pd的新功能出来;功能强大的另一面就是学习起来麻烦,咱们只能是见招拆招,遇到哪个说哪个了。所以这个命令有点让我欢喜让我忧的感觉,不过总的来说,当然还是欢喜多。
第二种,长生剑,db2exfmt。
大家学习数据库都是从SQL语句开始的吧。尽管你会讲中文、说英语、懂方言,但是抱歉,关系型数据库只听的懂SQL语言。所以你要想让数据库给你干活,你必须先学它听的懂的SQL,否则你对他说:亲,把A表的前三条记录给俺拿出来瞧瞧,你觉着数据库会理你这茬吗?他根本听不懂人话啊!在select/update/insert/delete等小有基础后,你选择一到多个关系数据库的产品来学习,这个时候,实例、数据库、表空间、锁、排序、监控器神马神马的就一窝蜂地来了。但是你有没有这样的一个感觉,学到后来,似乎又回到了起点,又是在研究select,在学SQL?以前你以实现目的为目标,现在你以高效率实现目的为目标,这就是进步。
当学会了SQL,你就学会了如何对DB2呼来喝去,你只管开心地告诉DB2你想要什么,但是你有木有关心过DB2?它是怎么样完成你交给它的任务?它是轻松加愉快地完成的,还是它累到吐血了?当大多数人只关心你飞的有多高时,只有好基友会关心你飞的累不累。
db2exfmt就是这样一个DB2的好基友,好武器,它帮咱做这样一件事:它会告诉你的SQL如果交给DB2去做,DB2会怎样去实现它,这个实现的过程说明就是SQL执行计划。做为DBA,必须关注那些核心SQL语句的执行计划,并将它们小心维护好,这是DBA最核心的工作之一。db2exfmt直接处理已收集并存储在解释表中的解释数据或快照信息,在解释表中查询信息、格式化结果,并生成一份执行计划的报告。
第三种,孔雀翎,db2dart。
db2dart是一个凶悍的武器,dart的含义是Database Analyses Report Tools,简称dart,而dart刚好是飞标的意思,咱们的第三种武器孔雀翎也是一种暗器,我给大家先讲讲这个段子,哈哈,你们不会反对吧?《孔雀翎》讲的是一位大哥要去报仇,可是坏蛋的武功那个高强啊,这大哥心里没底啊!于是他找他的一个朋友去借天下无敌的武器孔雀翎,这个暗器其实失传很久了,他朋友随便弄了个铁家伙就说这是孔雀翎,大哥信了,就去找坏蛋了,因为怀揣孔雀翎,大哥很有信心,反正打你不过,老子就放孔雀翎!经过一场大战终于毙了那个坏蛋,回来后还孔雀翎时,被他朋友告知真相。要说他那朋友也挺孙子哈,万一大哥掉链子肿么办呢。这个故事也挺教育我们DBA啊,你能把数据库技术学好,有这个信心很重要呢!
故事讲完,回来接着说,db2dart主要用于数据库分析诊断,它的功能强劲,日常运维最常用的是利用它诊断表空间高水位问题,但它的本事可不仅这些,它涉及到许多方面,当数据库损坏而又没有备份时,db2dart也是咱们的最后一颗救命草。某省移动公司(为了给面子,俺就不点名了)就遭遇到了这样的倒霉事,没备份,bad page了,最后用了db2dart大招,花了一周的时间,将数据基本恢复了。
db2dart不爽的地方是,它在使用时,要求数据库必须是deactivate的,也就是说这个工具是事后诸葛亮型的,数据库活着的时候不能用!死着的才行,这是和其他工具区别显著的地方。传说db2dart还有一些未公开的参数,即使被800指挥着客户用了,过一段时间也会自动失效,这更增加了这个工具的神秘感。
第四种,碧玉刀,db2advis。
OLTP系统如何提高性能,怎样才能让你的DB2跑的更快?窃以为有两条最重要的原则:1、降低数据规模;2、合理的索引。有人说物理设计啥啥的都很重要啊!先不和你抬杠,这些问题在后面都会说到的。第1条很好理解,胡司令在N年前就说过了:想当初,老子的队伍才开张,总共才有十几个人七八条枪。哈哈!如果你的数据库数据规模很小,比如就十几条记录七八张表,那你根本不必关心怎么去优化它,再二的DBMS产品也是运转如飞的,你优化的本事根本没有用武之地,如何降低数据规模?哪些数据有用,哪些数据可以迁出?这需要你对业务了如指掌,不懂业务的DBA,不是好的数据库管理员哦。
db2advis就是帮你完成第2条工作目标的武器,合理的索引设计是性能强悍的必要条件之一。有同学认为性能优化就是建索引,其实不然,光知道建有啥用?删索引、引导优化器使用合理的索引也同样重要,db2advis会替你支招,其中就包括创建、删除的建议,甚至还有MQT等,老少爷们大家走着瞧吧,关于db2advis广告之后,后面更加精彩!
第五种,多情环,db2look。
多数人都知道db2look是干啥地,我觉着它是一个挺了不起的工具,是DB2数据库的特色工具,它用于生成数据库的DDL,这为异构平台搬迁数据成为可能,讲到这儿,哥不免要为DB2叹息一声,在Oracle新的版本中,已经支持跨平台的备份恢复,而DB2还只能依靠db2look+db2move这对组合来完成这类工作。
我把db2look语句写在crontab中,让它每天都定时执行一次,我让我团队里的哥们每天都去阅读它生成的文件,并与前一天对比,为什么这么做呢?这是在没有启用数据库审计的情况下的想出来的土招--我要防止数据库有不明来历的新对象产生。另外,当数据库存在identity列或Sequence对象时,可以通过db2look的生成文件观察到它们的变化趋势,这方便你对SEQ资源何时枯竭做出估计。实际运维中,建议你至少拥有一份完整的生产库db2look文件,以备不时之需。
db2look另一个猛的功能是它的mimic模式。来看这样一个应用场景:你的生产库遇到了一点麻烦,现在你希望把它复制到测试环境中排错,不幸的是测试环境非常寒酸,它达不到生产环境那样的豪华配置,你只能取一点点数据到测试库中,这时你失望地发现SQL语句在测试环境中跑的路子和生产库中完全不同,环境毕竟变化了嘛,优化器不傻,在新环境中给出来了新的SQL执行计划。为了复现生产库的SQL运行环境,这时你需要依靠db2look的mimic骗一下优化器,观察它生成的DDL脚本,尽是update掉SYSSTAT的冬冬,于是,咱们的目的达到鸟。
第六种,离别钩,db2move。
db2move用来成批地导入导出数据,想要用好db2move,需要首先对export、import、load三个实用工具非常的熟练,你要非常清楚它们的功能和行为。注意,我说的是熟练。学习分为三个境界,我讲的这三个境界可不是那个流传很广,并且文诌诌的那三个境界,神马衣带渐宽,蓦然回首,又憔悴了之类的,土人有土理论,嘿嘿。这三个境界就是:懂,会,熟!
- 懂:就是知道原理,但没实际或不需要实际去操练就算过关的学习境界;
- 会:是不仅要知道原理,还要知道如何操作,命令记不住也没关系,但是要达到会查会用的这么一个境界;
- 熟:要求你不仅是从里到外,还是从外到里,都要详细知道其原理,命令不查手册也能闭眼写出。
呀!有点跑题了。
第七种,拳头,db2diag。
谁都希望自己维护的DB2数据库能够寿与天齐,啥毛病没有,可是现实总是有点残酷的,我们的数据库总是会有发烧头疼脚痒的情况出现。db2diag就是这样一种武器,它主要用于操作DB2的运行日志db2diag.log文件,而db2diag.log文件可以帮助DBA诊断数据库出现的99%的问题,说99%,其实也是没有办法的办法,因为我们对db2diag.log文件的依赖程度很高,谁让IBM给的诊断手段有点略显单一呢,各位同学忍了吧。有的时候,db2diag.log有点不太容易读懂,这需要你经常看,仔细看,看的多了情况就会好一些,这个又是DB2不太如Oracle的地方了L,IBM加油吧。
其实DB2的武器铁定不只七种,比它们更狠、更猛的武器,甚至是核武器也是存在的,比如:db2untag、db2trc等,上述七种之所以进了兵器谱的排名,是因为它们常用。还有,武器再好,关键也是要看使用者,各位只有通过勤练、猛试才能发挥出武器的最大能量,驾驭好它,让它属于你自己,否则你弄个危险命令搞不好还搬起石头砸废了自己的脚哦!
此文转载:http://www.db2china.net//home/space.php?uid=37983&do=blog&id=24073