SQL效能調節

2021-05-24 02:46:43 字數 2707 閱讀 4204

一、sql的執行過程

1.建立游標(create a cursor)

2.分析語句(parse the statement)

3.描述查詢結果

4.定義查詢的輸出資料

5.繫結變數

6.並行執行語句

7.執行語句

8.取出查詢的行

9.關閉游標

二、cbo規則

cbo=i/0 +cpu + network

三、四種索引掃瞄

1.索引唯一掃瞄(index unique scan)

2.索引範圍掃瞄(index range scan)

3.索引全掃瞄(index full scan)

4.索引快速掃瞄(index fast full scan)

四、組合索引使用條件

使用組合索引時,必須有引導列的參與,才使用組合索引。

五、表連線

1.連線型別

排序----合併連線

巢狀迴圈

雜湊連線

2.驅動表和探查表

驅動表一般是where條件返回記錄少的表,做為驅動表。

目的是減少i/o讀取次數。

雜湊連線中,構建hashtable與bitmap的表,作為驅動表。

select /*+ use_hash(emp) */ empno from emp,dept where emp.deptno=dept.deptno;

要使雜湊連線有效,需設定hash_join_enbaled=true

補充可設定:hash_area_size

3.選擇

排序---合併連線

a)對於非等值連線,這種連線方式的效率比較好。

b)如果在關聯的列上都有索引,效果更好。

c)對於將2個較大的row source做鏈結,改連線比nl連線要好。

d)如果是sort merge 返回的row source過大,則又會導致使用過多的rowid,在表中查詢資料時,資料庫效能下降,因為過多的i/o;

巢狀迴圈(nl)

a)如果驅動表比較小,並且在探索表上有唯一索引,或有高選擇性非唯一索引時,使用這種方法可以得到較好的效果。

b)nl有其它連線沒有的乙個優點是:可以先返回已經連線的行,且不必等待所有的連線處理完畢後,才返回資料。

雜湊連線

a)在2個較大的row source之間連線時會取得相對較好的效率,在乙個row source較小時,則取得更好的效率。

b)只能用在等值連線中。

六、產生執行計畫的三種方式

1.set autotrace on   set autotrace traceonly

a)如果出錯,則執行 ?/rdbms/admin/utlplan.sql

b)用sys登入,執行 ?/sqlplus/admin/plustrce.sql

c)grant plustrace to user_name

2.用explain plan命令

3.用dbms_system儲存過程生成執行計畫

七、干預執行計畫-------hints

hints可實現:

1)使用優化器的型別。

2)基於代價的優化器的優化目標,是all_rows還是first_rows

3)表的訪問路徑,是全表掃瞄,還是索引掃瞄,還是直接利用rowid

4)表之間的連線型別

5)表之間的連線順序

6)語句的並行程度。

指示優化器的方法與目標的hints:

all_rows  ---基於代價的優化器,以吞吐量為目標。

first_rows(n)----基於代價的優化器,以相應時間為目標。

choose    ----------根據是否有統計資訊,選擇不同的優化器。

rule  -------------   使用基於規則的優化器

select /*+ first_rows(10) */ employee_id,last_name,salary job_id from employees where department_id = 20;

select /*+ choose */ employee_id,last_name,salary job_id from employees where department_id = 20;

select /*+ rule */ employee_id,last_name,salary job_id from employees where department_id = 20;

指示儲存路徑的hints:

fulls   /*+ full (table) */

rowid  /*+ rowid(table) */

index   /*+ index(table[index] */

index_ffs /*+ index_ffs(table[index] */

no_index /*+ no_index(table[index] */

指示連線順序的hints:

order /*+ order */

start  /*+ start */

指示連線型別的hints:

use_nl  /*+ use_nl(table[table,...]) */   巢狀連線

use_merge  /*+ use_merge(table[table,...]) */ 使用排序-- 合併連線

use_hash  /*+ use_hash(table[table,...]) */使用hash連線

InnoDB效能調節提示

原帖 http imysql.cn node 116 週三,2006 09 06 15 27 yejr 如果unix的top工具或者windows任務管理器顯示,你的資料庫的工作負荷的cpu使用率小於70 則你的工作負荷可能是磁碟繫結的,可能你正 生成太多的事務和提交,或者緩衝池太小。使得緩衝池更大...

Spark 效能優化 調節並行度

並行度 spark 作業中,會根據 action 操作劃分成多個 job,每個 job 中會根據 shuffle 劃分成多個 stage,每個 stage 會分配多個 task 去執行,各個 stage 劃分的 task 數量就代表了 spark 作業在該 stage 的並行度。假設 spark 作...

效能調優之調節並行度

以 spark 中的 wordcount 作業為例,每個spark作業其實都是乙個 application,每個 application 對應多個 jobs,乙個 action 操作 比如 collect 觸發乙個 job,在wordcount程式中有乙個 job,每個 job 拆成多個 stage...