Oracle DBA 的個人復習筆記——一些簡單的Oracle內(nèi)部簡介
2024-08-29 13:53:54
供稿:網(wǎng)友
做事要有始有終。前面看到了Oracle的查詢語句那里了。今天接著來。
1.Oracle執(zhí)行查詢語句的步驟:
a。編譯:在編譯的時候,服務器進程會把sql語句的政務放入共享池,和庫高速緩存中,然后進行下面的:
1):首先在共享池里面搜索是不是有相同的sql語句。有的話,當然就將就拿來用了撒。沒有接下面。
2):檢查sql語句是不是正確的。
3):通過查看數(shù)據(jù)字典來檢查表和列的定義。
4):對所操作的對象加編譯鎖。--編譯時以防對象改變。
5):檢查所引用對象的用戶權限。
6):生成執(zhí)行sql語句所需的優(yōu)化的執(zhí)行計劃。
7):將sql語句和執(zhí)行計劃裝入共享的sql區(qū)。
b。執(zhí)行sql語句。
c。提取數(shù)據(jù)。
附:update語句執(zhí)行過程:
1):如果數(shù)據(jù)和回滾數(shù)據(jù)不在數(shù)據(jù)庫高速緩沖區(qū)(見下),服務器進程吧他們先從數(shù)據(jù)文件中讀到數(shù)據(jù)庫高速緩沖區(qū)中。
2):服務器在數(shù)據(jù)修改的行上加行鎖。
3):服務器進程把數(shù)據(jù)變化的信息和恢復數(shù)據(jù)所需要的信息記錄在重做日志文件(見下)中。
4):服務器進程把回滾所需的原始值和對數(shù)據(jù)所作的修改都寫入數(shù)據(jù)庫高速緩沖區(qū)。INSERT,DELECT 類似。
2.共享池(shared pool)
SGA的共享池由兩部分組成。庫高速緩存,數(shù)據(jù)字典高速緩存。
要想共享sql或PL/SQL,1,庫高速緩存要足夠大。不然語句很快就會被淘汰。2,語句要能被共享。
比較下面:
select * from emp where sql >=1200;
select * from emp where sql >=1201;
不同的語句哦。
select * from emp where sql >=&var;通用的哦。
在執(zhí)行SQL語句時,服務器進程將把數(shù)據(jù)文件,表,索引,列,用戶和其它數(shù)據(jù)對象的定義和權限放在數(shù)據(jù)字典高速緩存中。
改變共享池大小的命令:
alter system set shared_pool_size = 100 m;
3.數(shù)據(jù)庫高速緩沖區(qū)(database buffer cache)
數(shù)據(jù)庫在提取數(shù)據(jù)的時候,首先在這里查找,如果沒有,才進行磁盤操作。
4.內(nèi)存緩沖區(qū)顧問(v$db_cache_advice)
Oracle 9i以上的版本引入的一個工具。用來獲得調(diào)整數(shù)據(jù)庫高速緩沖區(qū)的統(tǒng)計信息。
狀態(tài)三種:ON , READY , OFF。
改變狀態(tài),如:alter system set db_cache_advice =OFF;
5。重做日志緩沖區(qū)(redo log buffer)
用于在數(shù)據(jù)庫崩潰的時候恢復數(shù)據(jù)用的。在DDL,DML操作數(shù)據(jù)前都將恢復所需的信息,即在寫入數(shù)據(jù)庫高速緩沖區(qū)之前,先寫入這里。
6.大池(large pool)和java池(java pool)
large pool提高效率。java pool 能夠編譯java語言的命令。
7.內(nèi)存緩沖區(qū)大小的設定。
DB_BLOCK_BUFFERS,LOG_BUFFER,SHARED_POOL_SIZE.SGA_MAX_SIZE 等等。
設置: ALTER SYSYTEM SET *******;
8.內(nèi)存緩沖區(qū)信息的獲取。
show sga;
select * from v$parameter where name ='sga_max_size';
還有一些進程沒有看。明天看,跑步去了。