第16章 鎖競合的檢出以及解決方案
1.DML鎖
行鎖(排他)
表鎖(共有)
2.DML共有表所,競合DDL防止
3.手動行鎖
SELECT ... FOR UPDATE NOWAIT | WAIT 數秒
4.手動表鎖
LOCK TABLE 表名 IN 鎖定模式名 MODE [NOWAIT]
ROW SHARE:SELECT...FOR UPDATE;
ROW EXCLUSIVE:DML(INSERT,UPDATE,DELETE)
EXCLUSIVE:DDL
エンキューメカニズム
5.鎖競合發生的場合:
變更沒有提交
事務長時間的場合
不必要的高鎖級別
6.死鎖
如果檢出死鎖,Oracle服務器會自動回滾解決死鎖。
死鎖發生的時候,警告日志(BACKGROUND_DUMP_DEST初始化參數),警告日志記錄的
用戶trece文件(USER_DUMP_DEST初期化參數指定)
7.死鎖的詳細情報,USER_DUMP_DEST初始化參數指定的目錄文件里確認。
8.V$LOCK視圖,V$LOCKED_OBJECT視圖
9.ALTER SYSTEM KILL SESSION 'SID列值,SERIAL#列值'
第17章 性能監視
1.性能問題對應
數據字典視圖:領域相關
動態性能視圖(V$DATABASE,V$INSTANCE):內存使用量,待機時間按,實例的活動
2.個別的matric情報頁面包含
最新已知值
平均值
上限值,下限值
3.EM中性能頁的內容
host
session:待機和實行中
實例
4.如果REDO日志buffer待機時間多發的情況下
把REDO日志文件配置在能夠高速操作的硬盤上
REDO日志buffer小的話,增加 大小
5.數據文件的硬盤I/O集中的話可以考慮下面的方法
RAID
ASM
6.表優化統計DBA_TABLES
NUM_ROWS:表保存的行數
BLOCKS;行保存的block數
AVG_ROW_LEN:平均行長度
LAST_ANALYZED:最后分析的日時
NUM_FREELIST_BLOCKS:空list里面的塊數
CHAIN_CNT:移行連鎖的行數
7.索引的統計
BLEVEL:
LEAF_BLOCKS:
DISTINCT_KEYS:
AVG_LEAF_BLOCKS_PER_KEY:
AVG_DATA_BLOCKS_PER_KEYS:
CLUSTERING_FACTOR
NuM_ROWS
8.優化統計相關
優化統計在收集時也是變化的
Oracle服務器再啟動也不變化
表中行數據頻繁更新的話,應該考慮手動來進行統計分析
對于大規模表,進行預算的統計收集更適合
使用DBMS_STATS包進行統計收集
9. 無效對象的troubleshooting
PL/SQL對象的有效性可以通過數據字典DBA_OBJECT視圖的STATUS列來確認
無效的PL/SQL再編譯
下回需要運行PL/SQL時自動編譯
使用ALTER .. COMPILE來手動編譯
ALTER FUNCTION 函數名 COMPILE
ALTER PROCEDURE 存儲過程名COMPILE
9.索引的再構筑
如果使用ALTER TABLE...MOVE命令,索引將無效,這是因為ROWID發生改變。可以查看數據字典的DBA_INDEXES視圖的STATUS列
來確認。
再構筑
ALTER INDEX 索引名 REBUILD [ONLINE] [TABLESPACE 表領域名]
如果使用ONLINE再構筑中DML可能。
再構筑中需要2倍的領域。