




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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等常用字段的长度为什么需要统一”。版本V1.2。高健2011-9-21根据9月15日贾文学处理故障的经验,通过减少对字段的函数处理来提升SQL性能;根据8月账期出现的程序不规范,例如,月报表使用日套表等情况,增加相关程序规范,提升数据质量;并将文档的定位进行扩充,在性能、安全的基础上增加了规范。版本V1.3。高健2012-2-21对“关闭数据库事务日志”方面的要求进一步进行了强化,确保避免在数据测试中由于操作失误导致数据库瘫痪。版本V1.4。刘红波、刘祥、高健、李兰田、符松2012-3-29增加3条: “新增、修改套表的流程及注意事项”、“SQL中NOT IN语法的注意事项”、“主产品、账目和套餐归并的统计指标进行集中管理的规范”。版本V1.5。-目录-DB2性能、安全和规范相关要点11.SERV_ID等常用字段的长度为什么需要统一?如何查看这些字段的统一定义要求?32.如何通过“执行计划”查看不合理的嵌套连接NLJOIN,从而优化多表连接(关联)的SQL性能?43.建表时,为什么必须指定分区键(PARTITIONING KEY)?指定分区键必须注意些什么?64.如何判断某个表的数据在各节点的空间有木有偏移(即,分区键合不合理)?65.为什么要求绝大部分数据处理SQL须关闭数据库事务日志?在哪些情况下,才可以不关闭事务日志?76.在下面的三个场景中执行SQL,怎样才能真正实现事务日志的关闭:1)CRT TELNET后台方式?2)TCL程序中?3)RAPID SQL工具中?77.LOAD过程中如何查看入库的进展?若发现异常、终止,必须立即执行的语句是什么?如何清除表的LOAD状态?88.若一旦发现正在执行的SQL有异常(例如,笛卡尔积),需杀之,应该如何处理?89.怎样看ODS或EDA的数据库空间满否?该信息多久更新一次?其中,TBSP_FREE_PAGES、KEEP、PER这三个字段的含义是什么?810.建表时,为什么必须指定表空间?其中,“报表、开发、临时性统计(即,除通过版本正式上线外)”人员建表时,必须分别放入三个专用的空间,它们的名字分别是什么?911.DROP或DELETE全表数据前,必须先执行什么语句才能释放空间?为什么部分命令将表的数据删除或压缩后,数据库的空间不释放?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.tables where tabname like DS%2011011014.为什么要做表的数据重组(压缩)reorg?ODS的哪些情况下需要尽快执行reorg?如何查看表的实际压缩比例?1115.表数据重组(压缩)reorg命令的两种常用格式?为什么在RAPID SQL工具中执行报错?1116.为什么有些表执行reorg命令后,实际压缩比例还是0,是不是需先确保一个属性?如何在建表语句中指定该属性?若建表中未指定,如何调整?如何查看某个表的该属性?1117.为什么要更新表的统计信息runstats?哪些情况下需要对表做runstats?1218.runstats命令的两种常用格式?为什么在RAPID SQL工具中执行报错?其中,哪种情况建议采用抽样10%的统计信息更新方式?1219.为什么在连接数据库后,必须在执行SQL后尽快断开数据库链接?其中,RAPID SQL工具和CRT TELENET工具要如何才能真正的断开数据库连接?1220.为什么“调度依赖不完整”和“RAPID SQL工具的数据库连接不断开”会导致EDA程序时常报 “锁等待超时”的生产故障?1321.为什么营维支撑系统的前端表要使用分区表?建表语法是什么?判断是不是分区表的方法?如果发现分区表坏了后,咋个办?1322.为什么ODS大部分情况下,使用表的锁(LOCK)为“表级”?另外,“行级”锁用于那些场合?指定表的锁(LOCK)类型的语句?1423.在ODS中,为什么大部分表不需要建索引?在哪些场合才有必要建索引? 哪些字段不适合建索引?1424.表的APPEND ON 属性是什么意思?如何设置这个属性?1425.综合考虑一个表的常用属性后,一个完整的建表SQL语法示例?例如,1526.建表、删表操作可不可以在程序中动态执行?一般哪个时候执行?1527.数据库的表张数太多,对性能有木有影响?列举哪些措施降低表的张数?1528.如果嫌dbpartitionnum函数运行速度太慢,有木有快速、大致估算某个表的各节点空间偏移情况的语句?为此,如果发现一个空间的2个节点严重偏移(8%以上),如何才能通过快速、批量运算,轻松揪出是哪些表的分区键指定得有问题?1629.在进行文件入库时,如何避免数据重复LOAD而导致表中数据重复? 在进行表出库时,如何避免DECIMAL类型的字段出现+、000等符号?1730.观察数据库主机当前的运行性能的vmstat命令格式?主要看哪些指标?是什么意思? IDLE是什么意思?1731.为什么减少对字段的函数处理可以大大提升SQL性能?如何改进?1732.在程序开发中,为什么月报的数据来源不能是日套表、DM表等每日会变化的数据?1833.新增、修改套表的流程及注意事项有哪些?1834.SQL中NOT IN语法的注意事项?1835.主产品和套餐(含优惠)的归并统计指标进行集中管理规范?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表中,信息包括“字段名,字段中文名,字段类型,字段长度,字段说明”。若大家在生产过程中,希望补充、完善该信息,可以与亚联公司的维护组(目前,刘红波)联系,由亚联公司统一维护。2. 如何通过“执行计划”查看不合理的嵌套连接NLJOIN,从而优化多表连接(关联)的SQL性能?对于开发人员,在上线前的试运行时,务必通过查看“执行计划”,诊断多表连接的SQL的性能是否合理;对于运行维护人员,若发现一个多表连接的SQL在20分钟内无法成功,也务必通过查看“执行计划”,查看是否存在不合理的连接方式(嵌套连接NLJOIN),或者大数据量的MSJOIN。最后,根据相应的优化步骤逐一实施,消灭掉不合理的嵌套连接NLJOIN、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数据库用户登陆,执行命令如下:ods_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.6.0暂时无法运行该功能。必须使用tbowner用户,执行这些工具中的“Explain Plan”之类的命令即可看到如下图结果。专题二:“表的连接方式”有哪些?DB2优化器在执行表的连接时,会在三种连接方式中自动选择一种。三种连接方式分别为:哈希连接(HSJOIN)、合并连接(MSJOIN)、嵌套连接(NLJOIN)。其中,HSJOIN和MSJOIN方式的速度均比较快,但是,由于MSJOIN需排序,所需的资源较HSJOIN大一些,所以,对于大数据量的表MSJOIN,则需要优化;而对于NLJOIN,由于需要嵌套循环,速度非常低,必须彻底消灭掉不合理的嵌套连接NLJOIN。专题三:“如何消灭掉不合理的嵌套连接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)?指定分区键必须注意些什么?问题一:首先,从分区键(PARTITIONING KEY)的作用看,数据库将根据此键把表的数据存储通过HASH算法分布到8个节点,便于8个节点并行处理,提升性能;若在建表语句中不指定表空间,系统则会默认用表的第一个字段,这样极有可能导致表空间各节点间的偏移、空间浪费,同时,降低处理性能。例子,create table aa () PARTITIONING KEY(serv_id) ;问题二:指定分区键必须注意三大方面:1)建表时,勿忘指定KEY:因为,若不指定,则将默认为第一个字段,难以满足第二点。2)指定KEY的字段(或字段组合)的数据值要尽量多、数据分布要尽量均匀;若一个字段满足不了,则需要多找几个字段,用逗号分隔,组合成KEY。3)大表关联的主要字段最好在KEY中,除非要为这个字段建索引。4. 如何判断某个表的数据在各节点的空间有木有偏移(即,分区键合不合理)?select dbpartitionnum(serv_id),count (*) from tabname group by dbpartitionnum(serv_id) order by 1;其中,(serv_id为该表任意取一个字段)5. 为什么要求绝大部分数据处理SQL须关闭数据库事务日志?在哪些情况下,才可以不关闭事务日志?问题一:从数据库事务日志记录的作用看,记录SQL事务操作(增、删、改)的数据日志,便于提供各种异常中断后的回滚等恢复功能;但是,若事务操作所涉及数据量大,则不仅会导致数据处理效率下降,而且容易导致事务日志满而被迫回滚,使整个数据库几乎瘫痪。为此,“除在表被损坏之后一定会导致数据丢失、无法恢复和再现以外,执行SQL必须关日志”特别说明:由于测试过程中无法完全预测数据量,为此,数据测试、验证处理过程中即使数量特别少,也必须关闭事务日志执行SQL。问题二:在“表被损坏之后一定会导致数据丢失、无法恢复和再现,且每次事务记录数小于50万以下”情况下,可以不关闭事务日志。如果事务操作对象是汇总表、且记录数量大,则必须拆分为套表模式后,关闭日志处理。6. 在下面的三个场景中执行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 TABLE 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工具中关闭日志:该工具没得办法实现关闭日志,切忌。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 TBOWNER.FX_COMM_SERV_201101_01问题三:若LOAD过程中异常终止后,表会因为仍处于LODA状态而无法访问,也是通过运行问题二的语句来清除LODA状态。8. 若一旦发现正在执行的SQL有异常(例如,笛卡尔积),需杀之,应该如何处理?立即拿起你的电话,联系超级系统管理员,只有此角色用户才有权限处理:目前为,管运部 (刘利;或亚联 (李双全9. 怎样看ODS或EDA的数据库空间满否?该信息多久更新一次?其中,TBSP_FREE_PAGES、KEEP、PER这三个字段的含义是什么?问题一:查看ODS或EDA的当前表空间使用情况:select 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) TBSP_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,STMP32K,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(DBPARTITIONNUM),ALL);问题二:该表的数据更新频率为:5分钟,但凌晨0:007:00期间,由于出账不更新。问题三:TBSP_FREE_PAGES、KEEP、PER分别表示:剩余页面数、未释放的空间%、空间使用率%10. 建表时,为什么必须指定表空间?其中,“报表、开发、临时性统计(即,除通过版本正式上线外)”人员建表时,必须分别放入三个专用的空间,它们的名字分别是什么?因为若不指定表空间,ODS就会把数据默认放入“TBS_DIM”中,直接导致生产事故。专用表空间(报表、开发、临时统计)的名称分别是:TBS_BB_01;TBS_KF_01;TBS_TJ_01。涉及此类应用的人必须放入专用表空间,不得乱放,也不得忘记指定表空间。例子,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. 为什么用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,ACCT_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的以下常用字段的含义是什么?要看到某个表的这些字段信息,需要先运行什么命令?其中,常用语句和字段: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:表的创建时间; 其他的COMPRESSION、AVGROWCOMPRESSIONRATIO:详见压缩相关说明。问题二:查看该表相关字段信息前,需要先运行runstats命令,语法详见runstats的问答。14. 为什么要做表的数据重组(压缩)reorg?ODS的哪些情况下需要尽快执行reorg?如何查看表的实际压缩比例?问题一:reorg的作用:1)空间方面,压缩表所占用的存储,2)性能方面,降低SELECT该表所使用的IO量,从而提升取数性能。问题二:ODS需要尽快执行REORG的情况:1)多次访问的表:例如,前台经常访问的结果表;后台处理中,经常使用的表2)数据变动量较大的表:例如,月初全量修复的表;每个账期插入大量数据的ST表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 (建议前台表使用此格式)为什么在RAPID SQL工具中执行报错:因为reorg命令的执行需要通过CRT TELENET工具16. 为什么有些表执行reorg命令后,实际压缩比例还是0,是不是需先确保一个属性?如何在建表语句中指定该属性?若建表中未指定,如何调整?如何查看某个表的该属性?问题一:reorg命令前:需确保该表的COMPRESS YES,否则,压缩不起作用。问题二:建表语句中:CREATE TABLE table_name( . . .) COMPRESS YES;问题三:建表后的调整:ALTER TABLE tablename COMPRESS YES;问题四:系统表syscat.tables的字段COMPRESSION:是否可压缩(R为可压缩)17. 为什么要更新表的统计信息runstats?哪些情况下需要对表做runstats? 问题一:作用:用来更新数据库对象的状态信息(例如,系统表syscat.tables),这对优化器生成最优的执行计划至关重要,也便于查看该表的常用信息。问题二:在以下三种情况下,必须尽快执行该表的runstats命令:1)在对table进行reorg后:若在reorg后不执行runstats,则只起到对空间的压缩作用,而难以通过降低IO来提升性能;2)当表中的数据发生了比较大(20%以上)变化后;3)在给表创建一个index后。18. runstats命令的两种常用格式?为什么在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工具问题三:抽样语法的适合场景:大表、且仅需大致估算系统表的信息,因其运行效率比全表统计更新提升5倍以上。19. 为什么在连接数据库后,必须在执行SQL后尽快断开数据库链接?其中,RAPID SQL工具和CRT TELENET工具要如何才能真正的断开数据库连接?问题一:ODS数据库的最大并发连接数有限制,该连接会占用系统资源,为此,需及时断开数据库连接。问题二:RAPID SQL工具断开数据库连接的方法,如下图:请务必点击 左上角Disconnect按钮;或彻底关闭 RAPID SQL工具客户端。CRT TELENET工具断开数据库连接的方法,如下图:运行 db2 terminate命令;或彻底关闭客户端。20. 为什么“调度依赖不完整”和“RAPID SQL工具的数据库连接不断开”会导致EDA程序时常报 “锁等待超时”的生产故障?1)调度依赖不完整:由于两个程序对应的调度未建依赖,导致两个调度在存在同时运行的隐患。为此,创建调度流程过程中,务必建立完整的依赖。2)RAPID SQL工具的数据库连接不断开:由于该工具提交的select语句会导致给对应的表添加一把读锁,在该连接断开前将不会释放,若当晚有程序需要对该表进行更新,则会报“锁等待超时”错误。为此,使用RAPID SQL工具时,务必随时断开数据库连接。21. 为什么营维支撑系统的前端表要使用分区表?建表语法是什么?判断是不是分区表的方法?如果发现分区表坏了后,咋个办?问题一:分区表的作用:相当于按分区键分为多个表,将数据分布到多个表空间,从而提高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 MINVALUE, 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)为“表级”?另外,“行级”锁用于那些场合?指定表的锁(LOCK)类型的语句?表级:在EDA大部分情况下使用表级,因为,一是多数表的数据量比较庞大,如果行级锁会消耗系统过多的资源,造成数据库性能下降,二是数据仓库系统的不需要支持很高的并发行级:如果是前台频繁更新的表,则务必改为行级LOCKSIZE ROW。语句:ALTER TABLE DEV.TJ07_YN_SERV_ACC_NBR_REL_200708 LOCKSIZE TABLE;23. 在ODS中,为什么大部分表不需要建索引?在哪些场合才有必要建索引? 哪些字段不适合建索引?问题一:因为每个表均要指定分区键(PARTITIONING KEY),若尽量将需要进行全表扫描的字段(用于查询条件、或与其他表关联的字段)纳入分区键中,便可以不用额外建索引了。问题二:表的分区键无法囊括的字段,且需要用于作为查询条件、或与其他表关联的字段。问题三:不适合建索引的字段: 分区键中的字段;数据值特别少的字段,如,状态、客户类型等。24. 表的APPEND ON 属性是什么意思?如何设置这个属性?APPEND ON 属性含义:当表中数据被delete删除时,空间并不会释放,而是在该行原来的位置做个“DELETED”的标志,表示该空间可以被重用。当DB2执行INSERT操作时,会扫描整个表的空闲空间并将新行置入空槽。而如果我们启用了append on特性,那么当插入新行时,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) 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 TABLE;26. 建表、删表操作可不可以在程序中动态执行?一般哪个时候执行?不能在程序中动态执行建表、删表操作:因为建表过程中会锁系统表,容易与其他操作冲突。若是套表,需提交维护人员配置后在晚上集中执行;若是非套表,一次性建好后,就不应该频繁删除、重建。27. 数据库的表张数太多,对性能有木有影响?列举哪些措施降低表的张数?有影响:截止2011年7月,ODS拥有4万张表,系统字典表太大,所有SQL的执行计划等均会首先访问系统字典表,为此,系统整体性能就会急剧下降。降低表张数的措施:例如,1)程序中,减少日套表,将需要保留时间超过7天以上的日表归档为月表2)及时删除(DROP)临时性建表28. 如果嫌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是最大和最小的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,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), DBPARTITIONNUM int, data_object_p_size bigint) partitioning key(name) in tbs_kf_01;29. 在进行文件入库时,如何避免数据重复LOAD而导致表中数据重复? 在进行表出库时,如何避免DECIMAL类型的字段出现+、000等符号?问题一:将load语句中的insert改为replace语句,例如,db2loadclientfrom/etl/eda/data/gj/201104.txtofdelmodifiedbycoldel$replaceintogj_test1问题二:在export语句中,增加“nochardel decplusblank striplzeros datesiso”等关键字,例如,db2 export to /etl/eda/data/gj/dim_product.txt of del modified by coldel$ nochardel decplusblank striplzeros datesiso select * from dim_product 30. 观察数据库主机当前的运行性能的vmstat命令格式?主要看哪些指标?是什么意思? IDLE是什么意思?格式:vmstat n (其中,n为指定每个报告之间的时间量,以秒单位。)主要指标:us sy id wa 分别表示资源占有“程序%、系统%、CPU空闲%、未完成的磁盘/NFS I/O 请求等待%”。其中,通常EDA系统的瓶颈在IO等待%,一般等待20%以上IO就比较严重了。通过降低IO量和IO并行力2个方面提升。平时讲的IDLE就是指:CPU空闲%情况;若IDLE值若一直为0,则表示系统特别繁忙。31. 为什么减少对字段的函数处理可以大大提升SQL性能?如何改进?在SQL中,如果一个字段的格式与期望的不一致,通常会使用一个函数对该字段进行处理;由于这种做法会导致对每条记录均做运算处理,所以,将极大地降低SQL的处理性能。为此,需通过各种方式来避免这种情况的发生,例如,将函数处理移到常量信息,使函数处理一次性完成。例子,1、优化前的SQL例子:case when ( (VALUES days (date(2011-09-13) - days (date(t1.LAST_CALL_DATE) )=90 ) or (VALUES days (date(20
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 颈椎护理查房流程
- 护理查房:低氧血症
- 2024年四川中烟工业有限责任公司笔试试题及答案
- 2024年辽宁沈阳工学院招聘真题
- 生物制剂原料药产业化项目环境影响报告书
- 2020-2025年施工员之土建施工专业管理实务模考预测题库(夺冠系列)
- 健康活动:我会洗小手
- 工程安全生产培训
- 旅游危机与安全管理课件
- 有关网络营销策划的方案(模板)
- 询问笔录模板范例
- 抗磷脂抗体致病机制中的免疫细胞调控
- 2024电工电子产品环境参数测量方法 第4部分:凝露
- DL-T-5161.5-2018电气装置安装工程质量检验及评定规程第5部分:电缆线路施工质量检验
- DZ∕T 0219-2006 滑坡防治工程设计与施工技术规范(正式版)
- 《电力行业企业培训师能力标准与评价规范》
- 贾宝玉人物形象悲剧意蕴研究的开题报告
- 银行厅堂微沙龙培训课件
- 2024年济南历下城市发展集团有限公司招聘笔试参考题库含答案解析
- 2022年中考英语-六选五-选词填空-真题训练含详解
- 可靠性测试检验报告
评论
0/150
提交评论