九、sql優化
1、優化器模式
oracle9i有兩種優化器模式可以選擇:
• rule-based:
– uses a ranking system
– syntax- and data dictionary–driven
• cost-based:
– chooses least-cost path
– statistics-driven
rule-based模式滿足向後相容,而cost-based模式中的成本大部分來自於邏輯讀的次數,推薦使用cost-based模式。
2、固定optimizer plan
1)概念
對於每乙個查詢,optimizer都會準備乙個定義了操作執行順序和方法的操作樹(執行計畫),oracle server根據這個執行計畫執行語句。通過固定執行計畫,可以強制應用通過一種理想的方式訪問資料,並且乙個穩定的執行計畫可以經歷資料庫的變化而保持不變。固定執行計畫通過建立stored outline實現,outline使用cost-based的optimizer,因為其由一系列的hints組成。
執行計畫的固定依賴於當判定乙個查詢是否存在stored outline時查詢語句是否完全一致,與判定shared pool裡乙個執行計畫是否可以重用時的匹配方式是一致的。
outline被儲存在outln schema中。
2) 建立stored outline
alter session set create_stored_outlines = train;
create or replace outline co_cl_join
for category train on
select co.crs_id, ...
from courses co,classes cl
where co.crs_id = cl.crs_id;
stored outline通過category組織,相同的sql語句可以在多個category同時擁有stored outline,如果categoey沒有指定,預設是default category。
當create_stored_outlines等於true或category名時,oracle會為所有被執行的sql語句建立stored outline,也可以通過create outline手工建立。
3) 使用stored outline
將use_stored_outlines設定為true或category名。
alter session set use_stored_outlines = train;
當為乙個查詢尋找stored outline時,查詢語句與stored outline裡的語句必須完全一致,在outline裡的hints也必須在查詢語句中出現。
3、private outline
private outline是當前儲存的stored outline的副本,可以被編輯而不影響正在執行的系統,乙個private outline只能被當前session看到,它的資料被儲存在當前被解析的schema裡。,知道顯示的將其公布。
當use_private_outlines=true時,乙個已有outline的sql被提交時,optimizer會檢查是否存在private outline,如果不存在,optimizer就不使用optimizer編譯語句,而不會去檢查公布的stored outline。
4、在sql中使用hints
create index gen_idx on customers(cust_gender);
select /*+ index(customers gen_idx)*/
cust_last_name,cust_street_address,cust_postal_code
from sh.customers where upper(gender)=』m』;
5、explain plan
可以不通過tracing,需要建立plan_table表:
sql>@oracle_home/rdbms/admin/utlxplan;
建立explain plan:
explain plan for select last_name from hr.emp;
查詢plan_table中的explain plan,可以直接查詢,也可以通過指令碼utlxplx.sql(隱藏並行查詢資訊)、utlxplp.sql(顯示並行查詢資訊)查詢。
6、管理統計資訊
利用analyize命令收集或刪除資訊。
引數:compute:統計精確的資料;
estimate:估計的統計資料。
各類統計資料的位置:
表:dba_tables;
索引:dba_indexes;
列:user_tab_col_statistics;
柱狀圖(histogram)詳細的描述了乙個特定列中資料的分布情況,可以通過analyize table ... for columns... 命令建立,儲存在dba_histogram/dba_tab_histograms中。
十、作業系統優化和使用資源管理器
1、作業系統優化
1)概念
作業系統優化時應該考慮的因素有:記憶體的使用;cpu的使用;io級別;網路流量。各個因素互相影響,正確的優化次序是記憶體、io、cpu。
作業系統使用了虛擬記憶體的概念,虛擬記憶體使每個應用感覺自己是使用記憶體的唯一的應用,每個應用都看到位址從0開始的單獨的一塊記憶體,虛擬記憶體被分成4k或8k的page,作業系統通過mmu(memory management unit)將這些page與物理記憶體對映起來,這個對映關係通過page table控制。
raw device是沒有檔案結構或目錄結構的磁碟或磁碟分割槽,由於它忽略了作業系統快取,在某些情況下可以顯著提公升效能,但是在windows nt下,由於作業系統io操作本身不使用檔案系統快取,所以raw device不能顯示效能上的優點。
2)guideline
cpu的最高使用率:90%;
os/user程序數之比:40/60;
各個cpu的負載應該大致均衡。
b、檢查 remote login
啟動了rlogin,伺服器資料庫a、資料庫b、資料庫c,終端console1、console2、console3及t3形成相互非常信任的關係,使用者只要擁有乙個伺服器的超級許可權就可以rlogin到.rhosts指明的任一主機而無需要口令。
建議:非常不安全,參考unix命令rlogin和/目錄下的檔案.rhosts。在正式環境伺服器和測試環境伺服器之間不要建立這種遠端信任的機制。
5)網路安全性檢查
檢查$oracle_home/dbs/initprod.ora檔案
#remote_login_passwordfile=exclusive
設定為remote_login_passwordfile=none,不允許遠端客戶用internal方式登陸。
2、資源管理器(resource manager)
通過資源管理器可以管理混合工作負載,控制系統效能。資料庫資源管理器包括:
• resource plans:包括 resource plan directives, 它指定了被分配到各個 resource consumer group的資源。
• resource consumer groups:定義了具有類似資源使用需求的一組使用者。
• resource plan directives:包括下列內容:為consumer groups 或 subplans 指定resource plans;在各個 consumer groups 或資源計畫的subplans 分配資源。
寫好C程式的10 大要點
要寫好c語言程式,最重要的當然是把要解決的問題分析清楚,設計好解決問題的方案和通過計算實現求解的過程,對問題的求解過程進行科學的結構化的分解。在此基礎上進一步考慮如何寫程式的時候,下面的建議可能有所幫助。這些建議中有些是一般性的,不僅僅對c語言程式設計有效 也有些是特別針對c語言程式設計的。這個表還...
寫好C程式的10 大要點
寫好c程式的10 大要點 要寫好c語言程式,最重要的當然是把要解決的問題分析清楚,設計好解決問題的方案和通過計算實現求解的過程,對問題的求解過程進行科學的結構化的分解。在此基礎上進一步考慮如何寫程式的時候,下面的建議可能有所幫助。這些建議中有些是一般性的,不僅僅對c語言程式設計有效 也有些是特別針對...
智慧型資料湖管理的九大要點
掌握資料管理原則,是在合適的時間為合適的人提供可信賴資料的基礎。資料湖讓您可以從多種資料 中儲存和處理所有資料 包括大資料 而無需對其預先搭建結構。您可以在資料湖中填入所有型別的資料,包括結構化 非結構化,或者多結構化資料,由此您的業務領導和分析人員可以從更多資料中得出更具創新的分析成果。當企業在規...