我們有一個要求,數以百萬計來自多個表作爲批處理作業(注意,我們不刪除所有的行以刪除行,我們是基於存儲的時間戳刪去在索引列中)。很顯然,正常的DELETE需要永久(因爲日誌記錄,參照約束檢查等)。我知道在LUW世界中,我們有ALTER TABLE NOT LOGGED INITIALLY,但我似乎無法找到DB2 v8 z/OS的等效SQL語句。任何人有什麼想法如何做到這一點非常快?另外,有關如何在刪除行時避免參考檢查的想法?請告訴我。從表中刪除了大量的行
回答
我們修改了表空間,因此鎖會出現在表空間級,而不是在頁面級別。一旦我們改變了DB2,只需要一個鎖就可以執行DELETE,而且我們沒有任何鎖定問題。至於日誌記錄,我們只是要求客戶瞭解所需的日誌量(因爲似乎沒有解決日誌記錄問題的解決方案)。至於約束,我們在刪除之後刪除並重新創建它們。
謝謝大家的幫助。
外鍵是否也有索引?
你怎麼會有你的刪除動作集?
CASCADE, NULL, NO ACTION
使用SET INTEGRITY暫時禁用對批處理過程的約束。 http://www.ibm.com/developerworks/data/library/techarticle/dm-0401melnyk/index.html
http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/r
在我已經解決了這樣的問題,過去通過導出數據並用替換樣式的命令重新加載它。例如:
EXPORT to myfile.ixf OF ixf
SELECT *
FROM my_table
WHERE last_modified < CURRENT TIMESTAMP - 30 DAYS;
然後你可以裝回它,取代舊的東西。
LOAD FROM myfile.ixf OF ixf
REPLACE INTO my_table
NONRECOVERABLE INDEXING MODE INCREMENTAL;
我不確定這是否會更快或不適合您(可能取決於您是否刪除了比您保留的更多)。
Scott,謝謝你的回答。是的,我們研究了這種變體(使用REORG DISCARD),但DB2 v8 for z/OS對您可以在表上發佈的SELECT(即使在執行LOAD/UNLOAD時)有限制。無論如何,結果很容易解決。我會盡快將它作爲答案發布。 – Azeem 2010-04-15 15:50:00
- 1. 從表中大量刪除後?
- 2. 刪除Oracle表的大量行
- 3. 刪除大量的行
- 4. 刪除大量的行
- 5. 如何從子表中刪除從父表中刪除的行?
- 6. 如何從數據表中刪除空數據行,除了自動增量列
- 7. 從Oracle中刪除大量數據
- 8. 從表中刪除多行
- 9. 從表中刪除多行
- 10. 從表中刪除一行
- 11. 從表中刪除X行
- 12. codeigniter從表中刪除行
- 13. 從HTML表中刪除行
- 14. 刪除大表中的重複行
- 15. 從巨大的表中刪除數據
- 16. 刪除大量的行從一個非常大的卡桑德拉表
- 17. 如何從TableView中刪除選定的行數量龐大?
- 18. 如何從.CSV文件中刪除大量的行?
- 19. Magento從表中刪除了訂單sales_flat_order
- 20. 如何刪除在線表中的大量行informix Db
- 21. 從巨大的表中刪除海量數據
- 22. 從左表中刪除多行的行
- 23. Mysql:從表中刪除其中的ID,除了行中的選擇?
- 24. 刪除大量的行很慢 - SQL Server
- 25. MySQL如何從非常大的表中刪除重複的行?
- 26. 從大文件中刪除一行php
- 27. 從Sql Server中的表中刪除行
- 28. 從angularjs中刪除表中的一行
- 29. ios從ViewController中的表中刪除行
- 30. 從大表中刪除一列
是的,外鍵已經有索引。刪除操作不是行動。我會研究SET INTEGRITY。這裏更大的問題是能夠暫時不LOG登錄DELETE操作。在DB2 z/OS v8上可以這麼做嗎?謝謝你的幫助! – Azeem 2010-04-06 13:38:11
您確定它是LOG部分的細節而不是參照完整性檢查嗎? 您可以發佈用於可能的性能改進的SQL嗎? – jasonk 2010-04-06 15:32:03
您確定初始日誌跳轉的語法是否正確? 'ALTER TABLE [tablename] ACTIVATE NOT LOGGED INITIALLY' – jasonk 2010-04-06 15:38:13