全局臨時表(GTT)的數據具有會話隔離性,若收集統計信息會因所有會話共享同一統計而導致嚴重不準(通常為 0),進而產生錯誤執行計劃。最佳實踐是鎖定統計信息並刪除現有統計,強制優化器使用動態採樣。
-- 1. 解鎖(若已鎖定)
EXEC DBMS_STATS.UNLOCK_TABLE_STATS('SCHEMA', 'GTT_TABLE');
-- 2. 刪除現有統計
EXEC DBMS_STATS.DELETE_TABLE_STATS('SCHEMA', 'GTT_TABLE');
-- 3. 鎖定統計,禁止自動/手工收集
EXEC DBMS_STATS.LOCK_TABLE_STATS('SCHEMA', 'GTT_TABLE');
SELECT table_name, stattype_locked
FROM dba_tab_statistics
WHERE table_name = 'GTT_TABLE';
返回 STATTYPE_LOCKED = 'ALL' 表示已完全鎖定。