oracle 最佳化方案小記

來源:互聯網
上載者:User

標籤:div   com   perl   多個   完美解決   建立資料表空間   指定   100%   xtend   

1. 目前狀況1.1 資料表空間未合理規劃,導致所有的使用者下的所有表都建立在預設的資料表空間下

oracle 使用過程中未針對特定資料表進行特定的資料表空間規劃,導致目前執行個體中所有的資料庫表都儲存中預設的資料表空間檔案(dbf)中,從目前高峰時的效能監測可以看出,oracle 資料所在磁碟使用率為 100%,而其他盤空空如也也沒有任何 IO 請求,導致了資源浪費。(澇得澇死,旱得旱死)

1.2 存在 IO 需求量大的查詢在高峰期執行

從 oracke 內建的效能監測程式統計分析得到在早上 7點至 10 點為查詢量高峰時期,而此時有部分 SQL 查詢帶來了大量的 IO 讀取。比如 select * 不添加任何分頁功能(猜測是資料同步),因此需要針對 oracle 的效能分析來排出 io 量大的查詢並盡量修改到非高峰期執行。

2. 最佳化方案2.1 提高磁碟利用率2.1.1 RAID / LVM

使用 raid 或 LVM 方案都可以將多個磁碟合并為一個磁碟來使用,而相關的 IO 請求都會根據特定邏輯最終都會分散到多個磁碟上來操作從而提高整體的 IO。
http://www.itpub.net/thread-787910-2-1.html 這個文章說了 LVM 幾乎不影響 IO, 反而因為多磁碟的加入使得 IO 能提高。

2.1.2 ORACLE 內建資料表空間拓展

這個部落格 列出了四種增加資料表空間大小的方法,其中一個:

ALTER TABLESPACE app_data ADD DATAFILE‘put dbf file path here‘ SIZE 500GAUTOEXTEND ON NEXT 1G MAXSIZE 2048G;

上面說的這種情況就是在其他磁碟建立一個 dbf 檔案來直接拓展當前的資料表空間大小,但是拓展後 oracle 是否會自動進行資料均衡等細節還需要參考官方文檔:
oracle dba doc

2.2 解決當前的磁碟熱點現象

如果能完美解決 2.1 所說可能當前問題也會被順便解決。目前狀態是已有資料全部都在一塊磁碟上,所有的查詢 IO 都還是走這一塊磁碟,oracle 的資料表空間自動拓展是否能自動均衡資料呢?如果不能,怎麼解決當前的查詢壓力都在這一塊磁碟之上的問題。

2.2.1 partition 遷移

oracle partition 遷移 這篇部落格講了如何將一個指定的 oracle 分區遷移到其他資料表空間中,參考此文章可以嘗試在其他磁碟上建立對應的資料表空間然後將分區遷移至該資料表空間中來分散資料。大體操作:

ALTER TABLE [tableName] MOVE PARTITION [partitionId] TABLESPACE [tableSpaceName];

ORACLE: Moving Table Partitions

2.2.2 直接整表遷移

如果想把整個表都遷移過去,那就可以這樣操作
-- 遷移 alter table [tableName] move tablespace [spaceName] -- 重建索引 alter index [index_name] rebuild tablespace [tablespace_name]

3. 綜上所述

決定採用 oracle 內建的 move table 來進行資料移轉。

3.1 具體操作3.1.1 使用 LVM 或 raid 整合多塊空閑磁碟為單塊磁碟

LVM:

pvcreate /dev/sda{1,2,3,4}vgcreate ORCL /dev/sda{1}vgextend ORCL /dev/sda{2,3,4}lvcreate ...
3.1.2 建立資料表空間

文法

-- 建立create tablespace test_user datafile ‘f:\test_user\zzg_data.dbf‘ size 200M;-- 授權grant create session,create table,create view,create sequence,unlimited tablespace to test_user;  
3.1.3 遷移資料庫表(整表遷移) [帶分區的不可隨即轉移,需要以分區為單位進行遷移]

move table

-- 遷移alter table [tableName] move tablespace [spaceName]-- 重建索引alter index [index_name] rebuild tablespace [tablespace_name];
3.1.4 以分區為單位進行遷移

ORACLE: Moving Table Partitions

批量產生遷移語句並執行

select ‘alter table traffic_cloud.‘||table_name||‘ move partition ‘||partition_name||‘ tablespace {spaceName};‘ from user_tab_partitions where table_name = ‘ILLEGAL_DATA‘;
  • 不要忘記改動態增加分區的相關命令,讓以後添加分區的時候自動添加到新的資料表空間中 *

oracle 最佳化方案小記

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.