oracle sql 排序優化
概念:
伺服器首先在sort_area_size指定大小的記憶體區域裡排序,如果所需的空間超過sort_area_size,排序會在臨時表空間裡進行。在專用伺服器模式下,排序空間在PGA中,在共享伺服器模式下,排序空間在UGA中。如果沒有建立large pool,UGA處於shared pool中,如果建立了large pool,UGA就處於large pool中,而PGA不在sga中,它是與每個程式對應單獨存在的。
PGA:program global area,為單個程式(伺服器程式或後臺程式)儲存資料和控制資訊的記憶體區域。PGA與程式一一對應,且只能被起對應的程式讀寫,PGA在使用者登入資料庫建立會話的時候建立。
有關排序空間自動管理的兩個引數:
Pga_aggregate_target: 10M-4000G,等於分配給oracle instance的所有記憶體減去SGA後的大小。
Workarea_size_policy: auto/manual,只有Pga_aggregate_target已定義時才能設定為auto。
1.什麼導致排序:
order by
group by
select distinct
create index
union/minus
anlyze
優化器呼叫排序合併連線
2. 排序在記憶體還是在磁碟中進行?
在記憶體執行的排序速度要比在磁碟執行的排序速度快14000倍。如果是專用連線,排序記憶體根據INIT.ORA的sort_area_size進行分配,如果是共享伺服器連線,排序記憶體根據large_pool_size進行分配。sort_area_size的增大可以減少磁碟排序,但是過大將使ORACLE效能降低,因為所用的連線回話都會分配到一個sort_area_size大小的記憶體,所以,為了提高有限的查詢速度,可能會浪費大量的記憶體。增加sort_multiblock_read_count的值使每次讀取更多的內容,減少執行次數,提高效能。
3.怎麼設定sort_area_size:每隔一段時間增加sort_area_size,並監控記憶體排序和磁碟排序數量。當sort_area_size的值的增加不在導致磁碟排序減少時,就合適了。
3.1、診斷和措施
col name format a20
Select * from v$sysstat where name like '%sort%';
Sort(disk):要求Io去臨時表空間的排序數目
Sort(memory):完全在memory中完成的排序數目
Sort(rows):被排序的行數合計
Sort(disk)/ Sort(memory)<5%,如果超過5%,增加sort_area_size的值。
SELECT disk.Value disk,mem.Value mem,(disk.Value/mem.Value)*100 ratio FROM v$sysstat disk,v$sysstat mem WHERE mem.NAME='sorts (memory)' AND disk.NAME='sorts (disk)';
3.2、監控臨時表空間的使用情況及其配置
Select tablespace_name,current_users,total_extents,used_extents,extent_hits,max_used_blocks,max_sort_blocks
FROM v$sort_segment ;
Column Description [Page]
CURRENT_USERS Number of active users
TOTAL_EXTENTS Total number of extents
USED_EXTENTS Extents currently allocated to sorts
EXTENT_HITS Number of times an unused extent was found in the pool
MAX_USED_BLOCKS Maximum number of used blocks
MAX_SORT_BLOCKS Maximum number of blocks used by an individual sort
臨時表空間的配置:
A、initial/next設定為sort_area_size的整數倍,允許額外的一個block作為segment的header
B、pctincrease=0
C、基於不同的排序需要建立多個臨時表空間
D、將臨時表空間檔案分散到多個磁碟上
4.sort_area_retain_size:決定磁碟排序完後保留記憶體的數量。
5.sort_multiblock_read_count,db_file_multiblock_read_count。
6。新增索引避免排序
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8554499/viewspace-592271/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL優化之利用索引排序SQL優化索引排序
- oracle sql優化OracleSQL優化
- oracle sql 優化OracleSQL優化
- Oracle SQL效能優化OracleSQL優化
- Oracle效能優化-SQL優化(案例一)Oracle優化SQL
- Oracle效能優化-SQL優化(案例二)Oracle優化SQL
- Oracle效能優化-SQL優化(案例三)Oracle優化SQL
- Oracle效能優化-SQL優化(案例四)Oracle優化SQL
- 高效的SQL(index range scan優化排序)SQLIndex優化排序
- oracle優化一例之sql優化Oracle優化SQL
- Oracle SQL優化總結OracleSQL優化
- Oracle Sql優化筆記OracleSQL優化筆記
- oracle sql like優化(一)OracleSQL優化
- Oracle SQL優化 總結OracleSQL優化
- SQL優化:組內排序取最大值SQL優化排序
- Oracle之sql語句優化OracleSQL優化
- ORACLE SQL效能優化系列 (一)OracleSQL優化
- 【優化】ORACLE set autotrace in SQL*Plus優化OracleSQL
- Oracle SQL優化基本步驟OracleSQL優化
- Oracle SQL效能優化常用方法OracleSQL優化
- Orderby 排序優化排序優化
- 外部排序優化排序優化
- Oracle SQL語句優化之UNIONOracleSQL優化
- Oracle優化之sql基本功Oracle優化SQL
- Oracle SQL效能優化系列介紹OracleSQL優化
- Oracle SQL優化之sql tuning advisorOracleSQL優化
- 利用Oracle 10g SQL優化器(STA)優化語句Oracle 10gSQL優化
- 【SQL優化】SQL優化工具SQL優化
- 快速排序及其優化排序優化
- [Hive]Hive排序優化Hive排序優化
- 快速排序及優化排序優化
- Oracle 某行系統SQL優化案例(一)OracleSQL優化
- Oracle某行系統SQL優化案例(二)OracleSQL優化
- Oracle某行系統SQL優化案例(三)OracleSQL優化
- Oracle某行系統SQL優化(案例五)OracleSQL優化
- 看了此文,Oracle SQL優化文章不必再看!OracleSQL優化
- oracle效能問題:sql語句優化OracleSQL優化
- ORACLE SQL語句優化技術分析OracleSQL優化