收藏 分销(赏)

DB2性能安全和规范相关要点V15.doc

上传人:快乐****生活 文档编号:2957876 上传时间:2024-06-12 格式:DOC 页数:19 大小:264.50KB
下载 相关 举报
DB2性能安全和规范相关要点V15.doc_第1页
第1页 / 共19页
DB2性能安全和规范相关要点V15.doc_第2页
第2页 / 共19页
DB2性能安全和规范相关要点V15.doc_第3页
第3页 / 共19页
DB2性能安全和规范相关要点V15.doc_第4页
第4页 / 共19页
DB2性能安全和规范相关要点V15.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

1、DB2性能、安全和规范相关要点V1.5-修订的版本历史-修订者修订日期修订内容高健、刘红波、李双全2010-09-13创建PPT版。高健2011-07-27创建问答。版本V0.8。高健2011-07-28采纳符松建议后,从应用角度进行问答描述。版本V0.9。高健2011-7-29采纳耿珍建议后,增加了目录,便于检索;以及进行了版本管理。版本V1.0。高健2011-8-8根据8月4日,IBM工程师的建议增加了“通过执行计划查看不合理的嵌套连接NLJOIN”及优化步骤。版本V1.1。高健2011-8-17根据8月16,亚联公司发布的ODS数据库常用字段定义规范,增加“SERV_ID等常用字段的长度

2、为什么需要统一”。版本V1.2。高健2011-9-21根据9月15日贾文学处理故障的经验,通过减少对字段的函数处理来提升SQL性能;根据8月账期出现的程序不规范,例如,月报表使用日套表等情况,增加相关程序规范,提升数据质量;并将文档的定位进行扩充,在性能、安全的基础上增加了规范。版本V1.3。高健2012-2-21对“关闭数据库事务日志”方面的要求进一步进行了强化,确保避免在数据测试中由于操作失误导致数据库瘫痪。版本V1.4。刘红波、刘祥、高健、李兰田、符松2012-3-29增加3条: “新增、修改套表的流程及注意事项”、“SQL中NOT IN语法的注意事项”、“主产品、账目和套餐归并的统计指

3、标进行集中管理的规范”。版本V1.5。-目录-DB2性能、安全和规范相关要点11.SERV_ID等常用字段的长度为什么需要统一?如何查看这些字段的统一定义要求?32.如何通过“执行计划”查看不合理的嵌套连接NLJOIN,从而优化多表连接(关联)的SQL性能?43.建表时,为什么必须指定分区键(PARTITIONING KEY)?指定分区键必须注意些什么?64.如何判断某个表的数据在各节点的空间有木有偏移(即,分区键合不合理)?65.为什么要求绝大部分数据处理SQL须关闭数据库事务日志?在哪些情况下,才可以不关闭事务日志?76.在下面的三个场景中执行SQL,怎样才能真正实现事务日志的关闭:1)C

4、RT TELNET后台方式?2)TCL程序中?3)RAPID SQL工具中?77.LOAD过程中如何查看入库的进展?若发现异常、终止,必须立即执行的语句是什么?如何清除表的LOAD状态?88.若一旦发现正在执行的SQL有异常(例如,笛卡尔积),需杀之,应该如何处理?89.怎样看ODS或EDA的数据库空间满否?该信息多久更新一次?其中,TBSP_FREE_PAGES、KEEP、PER这三个字段的含义是什么?810.建表时,为什么必须指定表空间?其中,“报表、开发、临时性统计(即,除通过版本正式上线外)”人员建表时,必须分别放入三个专用的空间,它们的名字分别是什么?911.DROP或DELETE全

5、表数据前,必须先执行什么语句才能释放空间?为什么部分命令将表的数据删除或压缩后,数据库的空间不释放?912.为什么用LIKE、AS命令建表时,容易发生节点空间偏移,还把TBS_DIM表空间给涨爆了?1013.系统表syscat.tables的以下常用字段的含义是什么?要看到某个表的这些字段信息,需要先运行什么命令?其中,常用语句和字段:select owner,definer,tabname,CARD ROWS,FPAGES,tbspace,STATS_TIME,CREATE_TIME,COMPRESSION,AVGROWCOMPRESSIONRATIO AVG from syscat.tab

6、les where tabname like DS%2011011014.为什么要做表的数据重组(压缩)reorg?ODS的哪些情况下需要尽快执行reorg?如何查看表的实际压缩比例?1115.表数据重组(压缩)reorg命令的两种常用格式?为什么在RAPID SQL工具中执行报错?1116.为什么有些表执行reorg命令后,实际压缩比例还是0,是不是需先确保一个属性?如何在建表语句中指定该属性?若建表中未指定,如何调整?如何查看某个表的该属性?1117.为什么要更新表的统计信息runstats?哪些情况下需要对表做runstats?1218.runstats命令的两种常用格式?为什么在RAP

7、ID SQL工具中执行报错?其中,哪种情况建议采用抽样10%的统计信息更新方式?1219.为什么在连接数据库后,必须在执行SQL后尽快断开数据库链接?其中,RAPID SQL工具和CRT TELENET工具要如何才能真正的断开数据库连接?1220.为什么“调度依赖不完整”和“RAPID SQL工具的数据库连接不断开”会导致EDA程序时常报 “锁等待超时”的生产故障?1321.为什么营维支撑系统的前端表要使用分区表?建表语法是什么?判断是不是分区表的方法?如果发现分区表坏了后,咋个办?1322.为什么ODS大部分情况下,使用表的锁(LOCK)为“表级”?另外,“行级”锁用于那些场合?指定表的锁(

8、LOCK)类型的语句?1423.在ODS中,为什么大部分表不需要建索引?在哪些场合才有必要建索引? 哪些字段不适合建索引?1424.表的APPEND ON 属性是什么意思?如何设置这个属性?1425.综合考虑一个表的常用属性后,一个完整的建表SQL语法示例?例如,1526.建表、删表操作可不可以在程序中动态执行?一般哪个时候执行?1527.数据库的表张数太多,对性能有木有影响?列举哪些措施降低表的张数?1528.如果嫌dbpartitionnum函数运行速度太慢,有木有快速、大致估算某个表的各节点空间偏移情况的语句?为此,如果发现一个空间的2个节点严重偏移(8%以上),如何才能通过快速、批量运

9、算,轻松揪出是哪些表的分区键指定得有问题?1629.在进行文件入库时,如何避免数据重复LOAD而导致表中数据重复? 在进行表出库时,如何避免DECIMAL类型的字段出现+、000等符号?1730.观察数据库主机当前的运行性能的vmstat命令格式?主要看哪些指标?是什么意思? IDLE是什么意思?1731.为什么减少对字段的函数处理可以大大提升SQL性能?如何改进?1732.在程序开发中,为什么月报的数据来源不能是日套表、DM表等每日会变化的数据?1833.新增、修改套表的流程及注意事项有哪些?1834.SQL中NOT IN语法的注意事项?1835.主产品和套餐(含优惠)的归并统计指标进行集中

10、管理规范?19-正文-1. SERV_ID等常用字段的长度为什么需要统一?如何查看这些字段的统一定义要求?问题一:对于DB2数据库,在表关联查询时,如相互匹配的两个字段数据类型不一致(包含定义的数据长度不一致,例如,一个字段为decimal(16,0),另一个为decimal(20,0))会引起数据库sql优化器无法使用最优的join方式进行关联查询,会出现大表关联时使用MSJOIN或NLJOIN的情况,严重影响查询效率。问题二:根据亚信发布的ODS数据库常用字段定义规范 v1.0,SERV_ID等常用字段的定义统一存储在tbowner.sys_table_columns_Standard表中

11、,信息包括“字段名,字段中文名,字段类型,字段长度,字段说明”。若大家在生产过程中,希望补充、完善该信息,可以与亚联公司的维护组(目前,刘红波)联系,由亚联公司统一维护。2. 如何通过“执行计划”查看不合理的嵌套连接NLJOIN,从而优化多表连接(关联)的SQL性能?对于开发人员,在上线前的试运行时,务必通过查看“执行计划”,诊断多表连接的SQL的性能是否合理;对于运行维护人员,若发现一个多表连接的SQL在20分钟内无法成功,也务必通过查看“执行计划”,查看是否存在不合理的连接方式(嵌套连接NLJOIN),或者大数据量的MSJOIN。最后,根据相应的优化步骤逐一实施,消灭掉不合理的嵌套连接NL

12、JOIN、MSJOIN。其中,1)查看SQL的执行计划的方法,详见“SQL的执行计划”专题;2)三种表连接方式的含义,详见“表的连接方式”专题;3)关于消灭掉不合理的连接方式的优化方法,详见“如何消灭掉不合理的嵌套连接NLJOIN”专题。专题一:查看“SQL的执行计划”查看SQL的执行计划常用方法有两种:一种是通过CRT工具后台执行;一种是通过第三方的DbVisualizer 7.1.1工具 或者TOAD工具,或者高版本的DB2客户端(9.5版以上),另,Rapid SQL 7.6.0暂时无法运行该功能。方法一:对于ODS,在CRT工具上必须使用tbowner数据库用户登陆,执行命令如下:od

13、s_db1 /home/tbowner/gj $ db2expln -g -d cqods -z ; -f a2011080816.sql -o a2011080816.exp其中,a2011080816.sql为需要分析的SQL所保存的文件;a2011080816.exp为分析后的执行计划输出文件;通过ods_db1 /home/tbowner/gj $ more a2011080815.exp 查看输出文件尾部的“执行计划”树形图。例如图1,方法二:对于第三方的DbVisualizer 7.1.1工具 或者TOAD工具,或者高版本的DB2客户端(9.5版以上),另,Rapid SQL 7.

14、6.0暂时无法运行该功能。必须使用tbowner用户,执行这些工具中的“Explain Plan”之类的命令即可看到如下图结果。专题二:“表的连接方式”有哪些?DB2优化器在执行表的连接时,会在三种连接方式中自动选择一种。三种连接方式分别为:哈希连接(HSJOIN)、合并连接(MSJOIN)、嵌套连接(NLJOIN)。其中,HSJOIN和MSJOIN方式的速度均比较快,但是,由于MSJOIN需排序,所需的资源较HSJOIN大一些,所以,对于大数据量的表MSJOIN,则需要优化;而对于NLJOIN,由于需要嵌套循环,速度非常低,必须彻底消灭掉不合理的嵌套连接NLJOIN。专题三:“如何消灭掉不合

15、理的嵌套连接NLJOIN” ?通过以下三步逐一进行核查、优化(MSJOIN的优化方法与NLJOIN一样):步骤1:作为连接条件的列数据类型定义不一致,例如,serv_id,一个表定义为decimal(12,0),一个表定义为decimal(14,0)步骤2:作为连接条件的列上有函数运算,例如,a.acc_nbr=substr(b.acc_nbr,5,20)步骤3:对应表上没有收集统计信息,SQL优化引擎不能做出正确判断。其中,如何查看是否有统计信息,详见syscat.tables问答;如何收集统计信息,详见runstats问答3. 建表时,为什么必须指定分区键(PARTITIONING KEY

16、)?指定分区键必须注意些什么?问题一:首先,从分区键(PARTITIONING KEY)的作用看,数据库将根据此键把表的数据存储通过HASH算法分布到8个节点,便于8个节点并行处理,提升性能;若在建表语句中不指定表空间,系统则会默认用表的第一个字段,这样极有可能导致表空间各节点间的偏移、空间浪费,同时,降低处理性能。例子,create table aa () PARTITIONING KEY(serv_id) ;问题二:指定分区键必须注意三大方面:1)建表时,勿忘指定KEY:因为,若不指定,则将默认为第一个字段,难以满足第二点。2)指定KEY的字段(或字段组合)的数据值要尽量多、数据分布要尽量

17、均匀;若一个字段满足不了,则需要多找几个字段,用逗号分隔,组合成KEY。3)大表关联的主要字段最好在KEY中,除非要为这个字段建索引。4. 如何判断某个表的数据在各节点的空间有木有偏移(即,分区键合不合理)?select dbpartitionnum(serv_id),count (*) from tabname group by dbpartitionnum(serv_id) order by 1;其中,(serv_id为该表任意取一个字段)5. 为什么要求绝大部分数据处理SQL须关闭数据库事务日志?在哪些情况下,才可以不关闭事务日志?问题一:从数据库事务日志记录的作用看,记录SQL事务操作

18、(增、删、改)的数据日志,便于提供各种异常中断后的回滚等恢复功能;但是,若事务操作所涉及数据量大,则不仅会导致数据处理效率下降,而且容易导致事务日志满而被迫回滚,使整个数据库几乎瘫痪。为此,“除在表被损坏之后一定会导致数据丢失、无法恢复和再现以外,执行SQL必须关日志”特别说明:由于测试过程中无法完全预测数据量,为此,数据测试、验证处理过程中即使数量特别少,也必须关闭事务日志执行SQL。问题二:在“表被损坏之后一定会导致数据丢失、无法恢复和再现,且每次事务记录数小于50万以下”情况下,可以不关闭事务日志。如果事务操作对象是汇总表、且记录数量大,则必须拆分为套表模式后,关闭日志处理。6. 在下面

19、的三个场景中执行SQL,怎样才能真正实现事务日志的关闭:1)CRT TELNET后台方式?2)TCL程序中?3)RAPID SQL工具中?对于每个场景,在建表时,均需要指定“NOT LOGGED INITIALLY”。例子,create table aa () NOT LOGGED INITIALLY ;场景一:CRT TELNET后台方式关闭日志,需两步完成:首先,将以下脚本在136.6.6.190 主机上 保存为 xxxx.db2 文件update command options using c off; connect to cqods user ? using ?;ALTER TABL

20、E tbowner.aaa ACTIVATE NOT LOGGED INITIALLY;insert into tbowner.aaa select b.* from tbowner.bbb b;commit;terminate;然后,运行以下命令,执行以上脚本文件:nohup db2 -tvf xxxx.db2 xxxx.log &场景二:TCL程序中关闭日志:通过传递关闭日志参数实现,例如:ds_chn_prd_serv_02_ms.tcl程序中set entity_count1 f_handle_sql $sqlBuff1 $ptemp_table_01 Y场景三:RAPID SQL工具

21、中关闭日志:该工具没得办法实现关闭日志,切忌。7. LOAD过程中如何查看入库的进展?若发现异常、终止,必须立即执行的语句是什么?如何清除表的LOAD状态?问题一:在LODD过程中,请及时查看load状态:db2 connect to dbname user username using passwddb2 load query table tbowner.FX_COMM_SERV_201101_01问题二:若通过上面语句看到有异常情况,请立刻终止装载数据,并务必立即执行以下语句:db2 load CLIENT from /dev/null of del terminate into TBOW

22、NER.FX_COMM_SERV_201101_01问题三:若LOAD过程中异常终止后,表会因为仍处于LODA状态而无法访问,也是通过运行问题二的语句来清除LODA状态。8. 若一旦发现正在执行的SQL有异常(例如,笛卡尔积),需杀之,应该如何处理?立即拿起你的电话,联系超级系统管理员,只有此角色用户才有权限处理:目前为,管运部 (刘利芬18983395030);或亚联 (李双全 18983818393)9. 怎样看ODS或EDA的数据库空间满否?该信息多久更新一次?其中,TBSP_FREE_PAGES、KEEP、PER这三个字段的含义是什么?问题一:查看ODS或EDA的当前表空间使用情况:s

23、elect value(substr(TBSP_NAME,1,12),ALL) TBSPNAME,value(substr(char(DBPARTITIONNUM),1,6),ALL) DBNUM,sum(TBSP_CURRENT_SIZE)/1024/1024/1024 TBSP_CURRENT_SIZE(GB),sum(TBSP_TOTAL_PAGES) TBSP_TOTAL_PAGES,sum(TBSP_USABLE_PAGES) TBSP_USABLE_PAGES,sum(TBSP_USED_PAGES) TBSP_USED_PAGES,sum(TBSP_FREE_PAGES) TBS

24、P_FREE_PAGES,decimal(decimal(sum(TBSP_USABLE_PAGES)-sum(TBSP_USED_PAGES)-sum(TBSP_FREE_PAGES),12,2)/sum(TBSP_USABLE_PAGES)*100,4,2) keep,decimal(decimal(sum(TBSP_USED_PAGES)/decimal(sum(TBSP_USABLE_PAGES),4,2)*100 PERfrom db2inst1.check_ods_tbs_moniwhere TBSP_NAME not in (SYSCATSPACE,TEMPSPACE1,STMP

25、32K,STMP32K_02,SYSTOOLSPACE,STMP32K_03,SYSTOOLSTMPSPACE,TBS_DEFAULT,TBS_TEMP)and INSERT_TIME = (select max(INSERT_TIME) from db2inst1.check_ods_tbs_moni)group by grouping sets(substr(TBSP_NAME,1,12),DBPARTITIONNUM),substr(TBSP_NAME,1,12),()order by value(substr(TBSP_NAME,1,12),ALL),value(char(DBPART

26、ITIONNUM),ALL);问题二:该表的数据更新频率为:5分钟,但凌晨0:007:00期间,由于出账不更新。问题三:TBSP_FREE_PAGES、KEEP、PER分别表示:剩余页面数、未释放的空间%、空间使用率%10. 建表时,为什么必须指定表空间?其中,“报表、开发、临时性统计(即,除通过版本正式上线外)”人员建表时,必须分别放入三个专用的空间,它们的名字分别是什么?因为若不指定表空间,ODS就会把数据默认放入“TBS_DIM”中,直接导致生产事故。专用表空间(报表、开发、临时统计)的名称分别是:TBS_BB_01;TBS_KF_01;TBS_TJ_01。涉及此类应用的人必须放入专用表

27、空间,不得乱放,也不得忘记指定表空间。例子,create table aa () IN TBS_TJ_01 ;11. DROP或DELETE全表数据前,必须先执行什么语句才能释放空间?为什么部分命令将表的数据删除或压缩后,数据库的空间不释放?问题一:在执行DROP或DELETE全表数据前,请务必先执行可立即释放表空间的清空表语句,语法:alter table xxxx activate not logged initially with empty table;问题二:因为DROP/DELETE/REORG不会立即释放数据库空间,这些命令要在该空间的所有数据库链接同时断开后才能释放。12. 为

28、什么用LIKE、AS命令建表时,容易发生节点空间偏移,还把TBS_DIM表空间给涨爆了?以下两种方法均可快速创建表,但是,他无法继承源表的partitioning key 和 表空间等信息,因此,很危险:create table MAP_ACCT_ITEM_TYPE_ID4_MULTI_bak_20110602 like MAP_ACCT_ITEM_TYPE_ID4_MULTI;或者create table MAP_ACCT_ITEM_TYPE_ID4_MULTI_bak_20110602 as (select ACCT_ITEM_TYPE_ID4,ACCT_ITEM_TYPE_DESC4,A

29、CCT_ITEM_TYPE_MKTID3 from MAP_ACCT_ITEM_TYPE_ID4_MULTI) with no data;为此,需务必在以上SQL语句中补充相关信息。例如,create table MAP_ACCT_ITEM_TYPE_ID4_MULTI_bak_20110602 like MAP_ACCT_ITEM_TYPE_ID4_MULTI in tbs_tj_01 partitioning key(ACCT_ITEM_TYPE_ID4) NOT LOGGED INITIALLY ;13. 系统表syscat.tables的以下常用字段的含义是什么?要看到某个表的这些字段

30、信息,需要先运行什么命令?其中,常用语句和字段:select owner,definer,tabname,CARD ROWS,FPAGES,tbspace,STATS_TIME,CREATE_TIME,COMPRESSION,AVGROWCOMPRESSIONRATIO AVG from syscat.tables where tabname like DS%201101问题一:常用字段:CARD:行数(数量级无问题,不完全精确);FPAGES:实际占用页面数;tbspace :表空间;STATS_TIME:runstats统计更新该表的时间;CTIME:表的创建时间; 其他的COMPRESS

31、ION、AVGROWCOMPRESSIONRATIO:详见压缩相关说明。问题二:查看该表相关字段信息前,需要先运行runstats命令,语法详见runstats的问答。14. 为什么要做表的数据重组(压缩)reorg?ODS的哪些情况下需要尽快执行reorg?如何查看表的实际压缩比例?问题一:reorg的作用:1)空间方面,压缩表所占用的存储,2)性能方面,降低SELECT该表所使用的IO量,从而提升取数性能。问题二:ODS需要尽快执行REORG的情况:1)多次访问的表:例如,前台经常访问的结果表;后台处理中,经常使用的表2)数据变动量较大的表:例如,月初全量修复的表;每个账期插入大量数据的S

32、T表3)数据冗余量较大宽表:特别是有中文字段冗余的表问题三:系统表syscat.tables的字段AVGROWCOMPRESSIONRATIO:实际压缩比例15. 表数据重组(压缩)reorg命令的两种常用格式?为什么在RAPID SQL工具中执行报错?格式一:db2 reorg table TBOWNER.DM_CHN_CUST_GRP_20100423 resetdictionary(强制新字典参数,可选)格式二:db2 reorg table TBOWNER.DS_ACT_ACCT_ITEM_AGG_201005 allow read access (建议前台表使用此格式)为什么在RAP

33、ID SQL工具中执行报错:因为reorg命令的执行需要通过CRT TELENET工具16. 为什么有些表执行reorg命令后,实际压缩比例还是0,是不是需先确保一个属性?如何在建表语句中指定该属性?若建表中未指定,如何调整?如何查看某个表的该属性?问题一:reorg命令前:需确保该表的COMPRESS YES,否则,压缩不起作用。问题二:建表语句中:CREATE TABLE table_name( . . .) COMPRESS YES;问题三:建表后的调整:ALTER TABLE tablename COMPRESS YES;问题四:系统表syscat.tables的字段COMPRESSI

34、ON:是否可压缩(R为可压缩)17. 为什么要更新表的统计信息runstats?哪些情况下需要对表做runstats? 问题一:作用:用来更新数据库对象的状态信息(例如,系统表syscat.tables),这对优化器生成最优的执行计划至关重要,也便于查看该表的常用信息。问题二:在以下三种情况下,必须尽快执行该表的runstats命令:1)在对table进行reorg后:若在reorg后不执行runstats,则只起到对空间的压缩作用,而难以通过降低IO来提升性能;2)当表中的数据发生了比较大(20%以上)变化后;3)在给表创建一个index后。18. runstats命令的两种常用格式?为什么

35、在RAPID SQL工具中执行报错?其中,哪种情况建议采用抽样10%的统计信息更新方式?格式一:对全表做统计更新:db2 runstats on table tbowner.ST_CUST_INTEGRAL_ODS_GRADE_201002 格式二:抽样10%做统计更新:db2 runstats on table tbowner.DS_ACT_ACCT_ITEM_AGG_201005 allow write access tablesample system (10) 问题二:runstats命令的执行需要通过CRT TELENET工具问题三:抽样语法的适合场景:大表、且仅需大致估算系统表的信

36、息,因其运行效率比全表统计更新提升5倍以上。19. 为什么在连接数据库后,必须在执行SQL后尽快断开数据库链接?其中,RAPID SQL工具和CRT TELENET工具要如何才能真正的断开数据库连接?问题一:ODS数据库的最大并发连接数有限制,该连接会占用系统资源,为此,需及时断开数据库连接。问题二:RAPID SQL工具断开数据库连接的方法,如下图:请务必点击 左上角Disconnect按钮;或彻底关闭 RAPID SQL工具客户端。CRT TELENET工具断开数据库连接的方法,如下图:运行 db2 terminate命令;或彻底关闭客户端。20. 为什么“调度依赖不完整”和“RAPID

37、SQL工具的数据库连接不断开”会导致EDA程序时常报 “锁等待超时”的生产故障?1)调度依赖不完整:由于两个程序对应的调度未建依赖,导致两个调度在存在同时运行的隐患。为此,创建调度流程过程中,务必建立完整的依赖。2)RAPID SQL工具的数据库连接不断开:由于该工具提交的select语句会导致给对应的表添加一把读锁,在该连接断开前将不会释放,若当晚有程序需要对该表进行更新,则会报“锁等待超时”错误。为此,使用RAPID SQL工具时,务必随时断开数据库连接。21. 为什么营维支撑系统的前端表要使用分区表?建表语法是什么?判断是不是分区表的方法?如果发现分区表坏了后,咋个办?问题一:分区表的作

38、用:相当于按分区键分为多个表,将数据分布到多个表空间,从而提高IO并行。问题二:建表语法:CREATE TABLE TBOWNER.DS_CHN_PRD_SERV_COM_03_20100821 LIKE MODEL.DS_CHN_PRD_SERV_COM_03_YYYYMMDD IN TBS_DM_04,TBS_DM_03,TBS_DM_02 INDEX IN TBS_INDEX_01 COMPRESS YES DISTRIBUTE BY HASH (GRID_ID) NOT LOGGED INITIALLY PARTITION BY RANGE(AREA_ID) ( STARTING MI

39、NVALUE, STARTING 12 ENDING 70 EVERY 1 , ENDING MAXVALUE)问题三:判断是否为分区表的方法:系统表syscat.tables的字段tbspace:为空,则为分区表问题四:首先,提取分区表建表脚本:例如,ods_db1 /home/odsrun/gj $ db2look_tbowner.ksh -t DS_CHN_ACT_SERV_ACCT_ITEM_MKT_01_201103 ;然后,执行提取出来的脚本即可。特别说明:通过“Quest Central”工具无法提取脚本或所在空间 。22. 为什么ODS大部分情况下,使用表的锁(LOCK)为“表

40、级”?另外,“行级”锁用于那些场合?指定表的锁(LOCK)类型的语句?表级:在EDA大部分情况下使用表级,因为,一是多数表的数据量比较庞大,如果行级锁会消耗系统过多的资源,造成数据库性能下降,二是数据仓库系统的不需要支持很高的并发行级:如果是前台频繁更新的表,则务必改为行级LOCKSIZE ROW。语句:ALTER TABLE DEV.TJ07_YN_SERV_ACC_NBR_REL_200708 LOCKSIZE TABLE;23. 在ODS中,为什么大部分表不需要建索引?在哪些场合才有必要建索引? 哪些字段不适合建索引?问题一:因为每个表均要指定分区键(PARTITIONING KEY),

41、若尽量将需要进行全表扫描的字段(用于查询条件、或与其他表关联的字段)纳入分区键中,便可以不用额外建索引了。问题二:表的分区键无法囊括的字段,且需要用于作为查询条件、或与其他表关联的字段。问题三:不适合建索引的字段: 分区键中的字段;数据值特别少的字段,如,状态、客户类型等。24. 表的APPEND ON 属性是什么意思?如何设置这个属性?APPEND ON 属性含义:当表中数据被delete删除时,空间并不会释放,而是在该行原来的位置做个“DELETED”的标志,表示该空间可以被重用。当DB2执行INSERT操作时,会扫描整个表的空闲空间并将新行置入空槽。而如果我们启用了append on特性

42、,那么当插入新行时,DB2就不必搜索空槽再插入,而是直接插入到表的最后。这适合用于大批量追加 插入的一些ST表。如果启用这种特性,需考虑及时reorg表。设置此属性的语法:ALTER TABLE DEV.TJ07_YN_SERV_ACC_NBR_REL_200708 APPEND ON;25. 综合考虑一个表的常用属性后,一个完整的建表SQL语法示例?例如,CREATE TABLE DEV.TJ07_YN_SERV_ACC_NBR_REL_200708 ( AREA_ID DECIMAL(9,0) , ACCT_ID DECIMAL(12,0) , SERV_ID DECIMAL(12,0)

43、NOT NULL , CUST_ID DECIMAL(12,0) NOT NULL , ACC_NBR VARCHAR(20) , PRODUCT_ID DECIMAL(9,0) )PARTITIONING KEY (SERV_ID)IN TBS_KF_01 INDEX IN TBS_INDEXNOT LOGGED INITIALLY COMPRESS YES;ALTER TABLE DEV.TJ07_YN_SERV_ACC_NBR_REL_200708 APPEND ON;ALTER TABLE DEV.TJ07_YN_SERV_ACC_NBR_REL_200708 LOCKSIZE TAB

44、LE;26. 建表、删表操作可不可以在程序中动态执行?一般哪个时候执行?不能在程序中动态执行建表、删表操作:因为建表过程中会锁系统表,容易与其他操作冲突。若是套表,需提交维护人员配置后在晚上集中执行;若是非套表,一次性建好后,就不应该频繁删除、重建。27. 数据库的表张数太多,对性能有木有影响?列举哪些措施降低表的张数?有影响:截止2011年7月,ODS拥有4万张表,系统字典表太大,所有SQL的执行计划等均会首先访问系统字典表,为此,系统整体性能就会急剧下降。降低表张数的措施:例如,1)程序中,减少日套表,将需要保留时间超过7天以上的日表归档为月表2)及时删除(DROP)临时性建表28. 如果

45、嫌dbpartitionnum函数运行速度太慢,有木有快速、大致估算某个表的各节点空间偏移情况的语句?为此,如果发现一个空间的2个节点严重偏移(8%以上),如何才能通过快速、批量运算,轻松揪出是哪些表的分区键指定得有问题?问题一:有系统表办法,语法例如:SELECT DBPARTITIONNUM,DATA_OBJECT_P_SIZE FROM TABLE (SYSPROC.ADMIN_GET_TAB_INFO(TBOWNER, AD_ACT_SERV_ACCT_UNIQUE_DETAIL) AS T问题二:快速找出导致某个表空间中2个节点严重偏移的表的步骤:首先,假设该表空间的0和6是最大和最

46、小的2个节点ID,通过运行以下SQL产生语句。select insert into gj_temp1 SELECT |name|, DBPARTITIONNUM,data_object_p_size FROM TABLE (SYSPROC.ADMIN_GET_TAB_INFO(|trim(creator)|,| |name|) AS T where DBPARTITIONNUM in (0,6); from sysibm.syscat.tables where tbspace =TBS_DW_02 ;然后,批量运行这些语句。最后,通过以下执行以下语句查看罪魁祸首。select name,d1,

47、d3,d1-d3 aa from (select name, sum(case when DBPARTITIONNUM=0 then value(data_object_p_size,0) else 0 end) d1, sum(case when DBPARTITIONNUM=6 then value(data_object_p_size,0) else 0 end) d3 from gj_temp1 group by name ) dd where abs(dd.d1-dd.d3) 100000其中,表gj_temp1的结构如下:create table gj_temp1(name varchar(100),

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 品牌综合 > 行业标准/行业规范

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服