【正文】
NSERT操作時(shí),會(huì)掃描整個(gè)表的空閑空間并將新行置入空槽。而如果我們啟用了append on特性,那么當(dāng)插入新行時(shí),DB2就不必搜索空槽再插入,而是直接插入到表的最后。這適合用于大批量追加 插入的一些ST表。如果啟用這種特性,需考慮及時(shí)reorg表。設(shè)置此屬性的語(yǔ)法:ALTER TABLE APPEND ON。25. 綜合考慮一個(gè)表的常用屬性后,一個(gè)完整的建表SQL語(yǔ)法示例?例如,CREATE TABLE ( 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 APPEND ON。ALTER TABLE LOCKSIZE TABLE。26. 建表、刪表操作可不可以在程序中動(dòng)態(tài)執(zhí)行?一般哪個(gè)時(shí)候執(zhí)行?不能在程序中動(dòng)態(tài)執(zhí)行建表、刪表操作:因?yàn)榻ū磉^(guò)程中會(huì)鎖系統(tǒng)表,容易與其他操作沖突。若是套表,需提交維護(hù)人員配置后在晚上集中執(zhí)行;若是非套表,一次性建好后,就不應(yīng)該頻繁刪除、重建。27. 數(shù)據(jù)庫(kù)的表張數(shù)太多,對(duì)性能有木有影響?列舉哪些措施降低表的張數(shù)?有影響:截止2011年7月,ODS擁有4萬(wàn)張表,系統(tǒng)字典表太大,所有SQL的執(zhí)行計(jì)劃等均會(huì)首先訪問(wèn)系統(tǒng)字典表,為此,系統(tǒng)整體性能就會(huì)急劇下降。降低表張數(shù)的措施:例如,1)程序中,減少日套表,將需要保留時(shí)間超過(guò)7天以上的日表歸檔為月表2)及時(shí)刪除(DROP)臨時(shí)性建表……28. 如果嫌dbpartitionnum函數(shù)運(yùn)行速度太慢,有木有快速、大致估算某個(gè)表的各節(jié)點(diǎn)空間偏移情況的語(yǔ)句?如果發(fā)現(xiàn)一個(gè)空間的2個(gè)節(jié)點(diǎn)嚴(yán)重偏移(7%以上),如何才能通過(guò)快速、批量運(yùn)算,輕松揪出是哪些表的分區(qū)鍵指定得有問(wèn)題? 問(wèn)題一:有系統(tǒng)表辦法,語(yǔ)法例如:SELECT DBPARTITIONNUM,DATA_OBJECT_P_SIZE FROM TABLE ((39。TBOWNER39。, 39。AD_ACT_SERV_ACCT_UNIQUE_DETAIL39。)) AS T問(wèn)題二:快速找出導(dǎo)致某個(gè)表空間中2個(gè)節(jié)點(diǎn)嚴(yán)重偏移的表的步驟:首先,假設(shè)該表空間的0和6是最大和最小的2個(gè)節(jié)點(diǎn)ID,通過(guò)運(yùn)行以下SQL產(chǎn)生語(yǔ)句。select 39。insert into gj_temp1 SELECT 39。39。39。||name||39。39。39。, DBPARTITIONNUM,data_object_p_size FROM TABLE ((39。39。39。||trim(creator)||39。39。39。,39。39。39。|| 39。39。||name||39。39。39。)) AS T where DBPARTITIONNUM in (1,5)。39。 from where tbspace =39。TBS_BB_0139。 。然后,批量運(yùn)行這些語(yǔ)句。最后,通過(guò)以下執(zhí)行以下語(yǔ)句查看罪魁禍?zhǔn)?。select name,d1,d3,d1d3 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() 100000其中,表gj_temp1的結(jié)構(gòu)如下:create table gj_temp1(name varchar(100), DBPARTITIONNUM int, data_object_p_size bigint) partitioning key(name) in tbs_kf_01。29. 在進(jìn)行文件入庫(kù)時(shí),如何避免數(shù)據(jù)重復(fù)LOAD而導(dǎo)致表中數(shù)據(jù)重復(fù)? 在進(jìn)行表出庫(kù)時(shí),如何避免DECIMAL類型的字段出現(xiàn)+、000等符號(hào)?問(wèn)題一:將load語(yǔ)句中的insert改為replace語(yǔ)句,例如,db2loadclientfrom39。/etl/eda/data/gj/39。ofdelmodifiedbycoldel$replaceintogj_test1問(wèn)題二:在export語(yǔ)句中,增加“nochardel decplusblank striplzeros datesiso”等關(guān)鍵字,例如,db2 export to /etl/eda/data/gj/ of del modified by coldel$ nochardel decplusblank striplzeros datesiso select * from dim_product 30. 觀察數(shù)據(jù)庫(kù)主機(jī)當(dāng)前的運(yùn)行性能的常用命令vmstat格式?主要看哪些指標(biāo)?是什么意思? IDLE是什么意思?典型的運(yùn)行程序太多導(dǎo)致系統(tǒng)性能下降的表象及處理方法?問(wèn)題一:格式:vmstat n (其中,n為指定每個(gè)報(bào)告之間的時(shí)間量,以秒單位。)該命令需通過(guò)CRT TELENET工具登錄到相應(yīng)的主機(jī)、執(zhí)行。問(wèn)題二、三:展示結(jié)果的主要指標(biāo)解釋:us sy id wa 分別表示資源占有“程序%、系統(tǒng)%、CPU空閑%、未完成的磁盤/NFS I/O 請(qǐng)求等待%”。其中,通常EDA系統(tǒng)的瓶頸在IO等待%,一般等待20%以上IO就比較嚴(yán)重了。通過(guò)降低IO量和IO并行力2個(gè)方面提升。問(wèn)題四:平時(shí)講的IDLE就是指:“CPU空閑%情況”;若IDLE值若一直為0,則表示系統(tǒng)使用率高、系統(tǒng)繁忙。問(wèn)題五:典型的運(yùn)行程序太多導(dǎo)致系統(tǒng)性能下降表象:CPU空閑%不為0,有空閑;但是,請(qǐng)求等待%較高,經(jīng)常超過(guò)20%。在這種情況下,建議適度較少并行運(yùn)行的程序數(shù)量,或者暫緩IO吞吐量大的SQL運(yùn)行。31. 為什么減少對(duì)字段的函數(shù)處理可以大大提升SQL性能?如何改進(jìn)?在SQL中,如果一個(gè)字段的格式與期望的不一致,通常會(huì)使用一個(gè)函數(shù)對(duì)該字段進(jìn)行處理;由于這種做法會(huì)導(dǎo)致對(duì)每條記錄均做運(yùn)算處理,所以,將極大地降低SQL的處理性能。為此,需通過(guò)各種方式來(lái)避免這種情況的發(fā)生,例如,將函數(shù)處理移到常量信息,使函數(shù)處理一次性完成。例子,優(yōu)化前的SQL例子:case when ( (VALUES days (date(39。2011091339。)) days (date()) )=90 ) or ((VALUES days (date(39。2011091339。)) days (date()) )=90 ) then 1 else 0 end as ARRIVE_FLAG優(yōu)化后的SQL例子:case when = (date(39。2011091339。) 90 days) or = (date(39。2011091339。) 90 days) then 1 else 0 end as ARRIVE_FLAG32. 在程序開發(fā)中,為什么月報(bào)的數(shù)據(jù)來(lái)源不能是日套表、DM表等每日會(huì)變化的數(shù)據(jù)?在程序開發(fā)中,為保障月報(bào)數(shù)據(jù)的準(zhǔn)確性、穩(wěn)定性,提升月報(bào)數(shù)據(jù)的可回溯能力,提升對(duì)月報(bào)數(shù)據(jù)的基礎(chǔ)數(shù)據(jù)問(wèn)題核查能力,需保障月報(bào)的數(shù)據(jù)來(lái)源準(zhǔn)確性和穩(wěn)定性。但是,對(duì)于日套表,只能保留3~4天,無(wú)法保障作為月數(shù)據(jù)來(lái)源的穩(wěn)定保留,無(wú)法保障重出賬和問(wèn)題的核查;對(duì)于DM表,每日會(huì)進(jìn)行數(shù)據(jù)更新,數(shù)據(jù)也無(wú)法穩(wěn)定保留。為此,在程序開發(fā)過(guò)程中,原則上,月報(bào)的數(shù)據(jù)只能來(lái)源于進(jìn)行月底歸檔后的數(shù)據(jù),或者月全量接口數(shù)據(jù)。33. 新增、修改套表的流程及注意事項(xiàng)有哪些?1)流程:若開發(fā)過(guò)程中需增加或修改日月套表,則將對(duì)應(yīng)的資料提交亞聯(lián)QA組(目前,劉紅波)統(tǒng)一配置、管理,實(shí)現(xiàn)套表的自動(dòng)創(chuàng)建和刪除;其中,所提交的套表資料至少包括:套表名、主鍵、生命周期需求等。2)注意事項(xiàng):在修改已有模型表結(jié)構(gòu)的時(shí)候,一定要手工重建所有已創(chuàng)建的套表;因?yàn)樽詣?dòng)建表程序?qū)⑻崆?天建表,但不會(huì)刪除已經(jīng)存在的表。例如對(duì)于dm_prd_serv_yyyymmdd 模型表于20120227 增加了一個(gè)字段,此時(shí)就應(yīng)該查詢20120227以后dm_prd_serv_yyyymmdd 是否已經(jīng)建好(select tabname from t where like upper(39。dm_prd_serv%39。)),如果已經(jīng)建好,需要人工重建20120228及以后的所有表。34. SQL中NOT IN語(yǔ)法的注意事項(xiàng)?我用一個(gè)實(shí)例在演示問(wèn)題的所在。Create table tmp_a(id integer) create table tmp_b(id integer,name varchar(10))Insert into tmp_a(id) values(1)。Insert into tmp_b(id) values(2)。Select a.* from tmp_a a where not in (select id from tmp_b b )。 返回的是1條記錄Insert into tmp_b (name) values(39。hello39。)