zoukankan      html  css  js  c++  java
  • DB2的七种武器

    大家读过古龙先生的七种武器吗?他们各有各的妙用,各有各的人生道理在其中。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

  • 相关阅读:
    jackson 枚举 enum json 解析类型 返回数字 或者自定义文字 How To Serialize Enums as JSON Objects with Jackson
    Antd Pro V5 中ProTable 自定义查询参数和返回值
    ES6/Antd 代码阅读记录
    es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?
    Antd Hooks
    使用.Net Core开发WPF App系列教程(其它 、保存控件内容为图片)
    使用.Net Core开发WPF App系列教程( 三、与.Net Framework的区别)
    使用.Net Core开发WPF App系列教程( 四、WPF中的XAML)
    使用.Net Core开发WPF App系列教程( 二、在Visual Studio 2019中创建.Net Core WPF工程)
    使用.Net Core开发WPF App系列教程( 一、.Net Core和WPF介绍)
  • 原文地址:https://www.cnblogs.com/jackhub/p/3147188.html
Copyright © 2011-2022 走看看