1. oracle 資料庫很慢,應該如何優化
1、是這樣的。
2、這個說不好,我沒這么做過。你手邊應該有oralce的全套電子文檔吧。關鍵是你要找對系統表或者視圖。我記得索引的系統視圖不是這個。
3、這些與你要做的有關系嗎?別像沒頭蒼蠅一樣瞎撞了。
4、不用刪表,如果你連基本的語句命令都不懂,那隻能看書了。
5、慢的原因有好多,逐步排除吧,等找到真正原因再說。急沒用的。
6、默認情況下,是會建到用戶的默認表空間的。
7、這個看你的維護需要。最起碼先弄明白你的庫是怎麼回事再說吧。就從這些問題看,你根本就是門外漢,連庫是怎麼回事都沒弄明白。
2. 面試題:oracle資料庫優化
oracle資料庫優化的話主要有以下幾個方面(我接觸過的,可能不全面):
1 查詢語句的優化,這個主要是根據語句和資料庫索引的情況,結合查詢計劃的分析結果,對性能較低的查詢語句進行重寫,在執行查詢前執行表分析語句也可以算這里;
2 數據結構優化,這個包括根據實際的應用中業務邏輯,對資料庫的結構進行重新設計,或者創建相關索引里提高查詢效率;
3 資料庫設置優化,這方面主要是調整資料庫和數據結構的相關參數提高應用訪問系統的效率;
4 存儲結構優化,在數據量較大的情況下,可以考慮通過資料庫的存儲結構進行優化,比如對數據進行partition,將數據存儲在磁碟陣列伺服器上等。
我的經驗有限,以上是部分建議
3. oracle資料庫有哪兩種優化模式
Oracle的優化器共有兩種的優化方式,即基於規則的優化方式(Rule-Based
Optimization,簡稱為RBO)和基於代價的優化方式(Cost-Based
Optimization,簡稱為CBO)
A、RBO方式:優化器在分析sql語句時,所遵循的是Oracle內部預定的一些規則。比如我們常見的,當一個where子句中的一列有索引時去走索引。
B、CBO方式:依詞義可知,它是看語句的代價(Cost)了,這里的代價主要指Cpu和內存。
優化器在
判斷是否用這種方式時,主要參照的是表及索引的統計信息。統計信息給出表的大小
、有少行、每行的長度等信息。這些統計信息起初在庫內是沒有的,是你在做analyze後才出現的,很多的時侯過期統計信息會令優化器做出一個錯誤的執行
計劃,因些我們應及時更新這些信息。在Oracle8及以後的版本,Oracle列推薦用CBO的方式。
我們要明了,不一定走索引就是優的
,比如一個表只有兩行數據,一次IO就可以完成全表的檢索,而此時走索引時則需要兩次IO,這時對這個表做全表掃描(full
table
scan)是最好的。
4. Oracle資料庫大數據量表如何優化
要看數據多到何種程度。
比如一個表的筆數只是幾百,如果不需要和其他大表關聯查詢數據,連索引都不用建。
如果是幾十萬級別的表,一般正確建索引就可以。
如果是千萬級別的表,不但要正確建索引,而且要定時手工進行收集統計信息維護,不建議系統自動維護,以免影響使用性能。
如果是億以上級別的表,則可考慮按一定條件拆分表資料,將舊資料歸檔,這樣可改善生成表的使用。
資料庫優化的同時,程序也要進行相應優化,程序和
數據科學
搭配,才能使性能達到最佳。
5. 資料庫性能優化有哪些措施
1、調整數據結構的設計。這一部分在開發信息系統之前完成,程序員需要考慮是否使用ORACLE資料庫的分區功能,對於經常訪問的資料庫表是否需要建立索引等。
2、調整應用程序結構設計。這一部分也是在開發信息系統之前完成,程序員在這一步需要考慮應用程序使用什麼樣的體系結構,是使用傳統的Client/Server兩層體系結構,還是使用Browser/Web/Database的三層體系結構。不同的應用程序體系結構要求的資料庫資源是不同的。
3、調整資料庫SQL語句。應用程序的執行最終將歸結為資料庫中的SQL語句執行,因此SQL語句的執行效率最終決定了ORACLE資料庫的性能。ORACLE公司推薦使用ORACLE語句優化器(Oracle Optimizer)和行鎖管理器(row-level manager)來調整優化SQL語句。
4、調整伺服器內存分配。內存分配是在信息系統運行過程中優化配置的,資料庫管理員可以根據資料庫運行狀況調整資料庫系統全局區(SGA區)的數據緩沖區、日誌緩沖區和共享池的大小;還可以調整程序全局區(PGA區)的大小。需要注意的是,SGA區不是越大越好,SGA區過大會佔用操作系統使用的內存而引起虛擬內存的頁面交換,這樣反而會降低系統。
5、調整硬碟I/O,這一步是在信息系統開發之前完成的。資料庫管理員可以將組成同一個表空間的數據文件放在不同的硬碟上,做到硬碟之間I/O負載均衡。
6、調整操作系統參數,例如:運行在UNIX操作系統上的ORACLE資料庫,可以調整UNIX數據緩沖池的大小,每個進程所能使用的內存大小等參數。
資料庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫,它產生於距今六十多年前,隨著信息技術和市場的發展,特別是二十世紀九十年代以後,數據管理不再僅僅是存儲和管理數據,而轉變成用戶所需要的各種數據管理的方式。資料庫有很多種類型,從最簡單的存儲有各種數據的表格到能夠進行海量數據存儲的大型資料庫系統都在各個方面得到了廣泛的應用。
在信息化社會,充分有效地管理和利用各類信息資源,是進行科學研究和決策管理的前提條件。資料庫技術是管理信息系統、辦公自動化系統、決策支持系統等各類信息系統的核心部分,是進行科學研究和決策管理的重要技術手段。
在經濟管理的日常工作中,常常需要把某些相關的數據放進這樣的「倉庫」,並根據管理的需要進行相應的處理。
例如,企業或事業單位的人事部門常常要把本單位職工的基本情況(職工號、姓名、年齡、性別、籍貫、工資、簡歷等)存放在表中,這張表就可以看成是一個資料庫。有了這個"數據倉庫"我們就可以根據需要隨時查詢某職工的基本情況,也可以查詢工資在某個范圍內的職工人數等等。這些工作如果都能在計算機上自動進行,那我們的人事管理就可以達到極高的水平。此外,在財務管理、倉庫管理、生產管理中也需要建立眾多的這種"資料庫",使其可以利用計算機實現財務、倉庫、生產的自動化管理。
(5)如何優化oracle資料庫擴展閱讀
資料庫,簡單來說是本身可視為電子化的文件櫃--存儲電子文件的處所,用戶可以對文件中的數據進行新增、截取、更新、刪除等操作。
資料庫指的是以一定方式儲存在一起、能為多個用戶共享、具有盡可能小的冗餘度的特點、是與應用程序彼此獨立的數據集合。
在經濟管理的日常工作中,常常需要把某些相關的數據放進這樣的"倉庫",並根據管理的需要進行相應的處理。
例如,企業或事業單位的人事部門常常要把本單位職工的基本情況(職工號、姓名、年齡、性別、籍貫、工資、簡歷等)存放在表中,這張表就可以看成是一個資料庫。有了這個"數據倉庫"我們就可以根據需要隨時查詢某職工的基本情況,也可以查詢工資在某個范圍內的職工人數等等。這些工作如果都能在計算機上自動進行,那我們的人事管理就可以達到極高的水平。此外,在財務管理、倉庫管理、生產管理中也需要建立眾多的這種"資料庫",使其可以利用計算機實現財務、倉庫、生產的自動化管理。
6. Oracle分區是怎樣優化資料庫的
Oracle的分區可以分為:列表分區、范圍分區、散列分區、復合分區。
1、增強可用性:如果表的一個分區由於系統故障而不能使用,表的其餘好的分區仍可以使用;
2、減少關閉時間:如果系統故障隻影響表的一部分分區,那麼只有這部分分區需要修復,可能比整個大表修復花的時間更少;
3、維護輕松:如果需要建表,獨自管理每個公區比管理單個大表要輕松得多;
4、均衡I/O:可以把表的不同分區分配到不同的磁碟來平衡I/O改善性能;
5、改善性能:對大表的查詢、增加、修改等操作可以分解到表的不同分區來並行執行,可使運行速度更快;
6、分區對用戶透明:最終用戶感覺不到分區的存在。
7. ORACLE資料庫性能優化概述
實際上 為了保證ORACLE資料庫運行在最佳的性能狀態下 在信息系統開發之前就應該考慮資料庫的優化策略 優化策略一般包括伺服器操作系統參數調整 ORACLE資料庫參數調整 網路性能調整 應用程序SQL語句分析及設計等幾個方面 其中應用程序的分析與設計是在信息系統開發之前完成的
分析評價ORACLE資料庫性能主要有資料庫吞吐量 資料庫用戶響應時間兩項指標 資料庫吞吐量是指單位時間內資料庫完成的SQL語句數目 資料庫用戶響應時間是指用戶從提交SQL語句開始到獲得結果的那一段時間 資料庫用戶響應時間又可以分為系統服務時間和用戶等待時間兩項 即
資料庫用戶響應時間=系統服務時間 + 用戶等待時間
上述公式告訴我們 獲得滿意的用戶響應時間有兩個途徑 一是減少系統服務時間 即提高資料庫的吞吐量 二是減少用戶等待時間 即減少用戶訪問同一資料庫資源的沖突率
性能優化包括如下幾個部分
ORACLE資料庫性能優化之一 調整數據結構的設計
這一部分在開發信息系統之前完成 程序員需要考慮是否使用ORACLE資料庫的分區功能 對於經常訪問的資料庫表是否需要建立索引等
ORACLE資料庫性能優化之二 調整應用程序結構設計
這一部分也是在開發信息系統之前完成 程序員在這一步需要考慮應用程序使用什麼樣的體系結構 是使用傳統的Client/Server兩層體系結構 還是使用Browser/Web/Database的三層體系結構 不同的應用程序體系結構要求的資料庫資源是不同的
ORACLE資料庫性能優化之三 調整資料庫SQL語句
應用程序的執行最終將歸結為資料庫中的SQL語句執行 因此SQL語句的執行效率最終決定了ORACLE資料庫的性能 ORACLE公司推薦使用ORACLE語句優化器(Oracle Optimizer)和行鎖管理器(row level manager)來調整優化SQL語句
ORACLE資料庫性能優化之四 調整伺服器內存分配
內存分配是在信息系統運行過程中優化配置的 資料庫管理員可以根據資料庫運行狀況調整資料庫系統全局區(SGA區)的數據緩沖區 日誌緩沖區和共享池的大小 還可以調整程序全局區(PGA區)的大小 需要注意的是 SGA區不是越大越好 SGA區過大會佔用操作系統使用的內存而引起虛擬內存的頁面交換 這樣反而會降低系統
ORACLE資料庫性能優化之五 調整硬碟I/O 這一步是在信息系統開發之前完成的
資料庫管理員可以將組成同一個表空間的數據文件放在不同的硬碟上 做到硬碟之間I/O負載均衡
ORACLE資料庫性能優化之六 調整操作系統參數
例如 運行在UNIX操作系統上的ORACLE資料庫 可以調整UNIX數據緩沖池的大小 每個進程所能使用的內存大小等參數
lishixin/Article/program/Oracle/201311/17687
8. 優化資料庫大幅度提高Oracle的性能
幾個簡單的步驟大幅提高Oracle性能 我優化資料庫的三板斧
資料庫優化的討論可以說是一個永恆的主題 資深的Oracle優化人員通常會要求提出性能問題的人對資料庫做一個statspack 貼出資料庫配置等等 還有的人認為要抓出執行最慢的語句來進行優化 但實際情況是 提出疑問的人很可能根本不懂執行計劃 更不要說statspack了 而我認為 資料庫優化 應該首先從大的方面考慮 網路 伺服器硬體配置 操作系統配置 Oracle伺服器配置 數據結構組織 然後才是具體的調整 實際上網路 硬體等往往無法決定更換 應用程序一般也無法修改 因此應該著重從資料庫配置 數據結構上來下手 首先讓資料庫有一個良好的配置 然後再考慮具體優化某些過慢的語句 我在給我的用戶系統進行優化的過程中 總結了一些基本的 簡單易行的辦法來優化資料庫 算是我的三板斧 呵呵 不過請注意 這些不一定普遍使用 甚至有的會有副作用 但是對OLTP系統 基於成本的資料庫往往行之有效 不妨試試 (注 附件是Burleson寫的用來報告資料庫性能等信息的腳本 本文用到)
一.設置合適的SGA
常常有人抱怨伺服器硬體很好 但是Oracle就是很慢 很可能是內存分配不合理造成的 ( )假設內存有 M 這通常是小型應用 建議Oracle的SGA大約 M 其中 共享池(SHARED_POOL_SIZE)可以設置 M到 M 根據實際的用戶數 查詢等來定 數據塊緩沖區可以大致分配 M M i下需要設置DB_BLOCK_BUFFERS DB_BLOCK_BUFFER*DB_BLOCK_SIZE等於數據塊緩沖區大小 i 下的數據緩沖區可以用db_cache_size來直接分配
( )假設內存有 G Oracle 的SGA可以考慮分配 M 共享池分配 M到 M 數據緩沖區分配 M到 M
( )內存 G SGA可以考慮分配 G 共享池 M到 M 剩下的給數據塊緩沖區
( )內存 G以上 共享池 M到 M就足夠啦 再多也沒有太大幫助 (Biti_rainy有專述)數據緩沖區是盡可能的大 但是一定要注意兩個問題 一是要給操作系統和其他應用留夠內存 二是對於 位的操作系統 Oracle的SGA有 G的限制 有的 位操作系統上可以突破這個限制 方法還請看Biti的大作吧
二.分析表和索引 更改優化模式
Oracle默認優化模式是CHOOSE 在這種情況下 如果表沒有經過分析 經常導致查詢使用全表掃描 而不使用索引 這通常導致磁碟I/O太多 而導致查詢很慢 如果沒有使用執行計劃穩定性 則應該把表和索引都分析一下 這樣可能直接會使查詢速度大幅提升 分析表命令可以用ANALYZE TABLE 分析索引可以用ANALYZE INDEX命令 對於少於 萬的表 可以考慮分析整個表 對於很大的表 可以按百分比來分析 但是百分比不能過低 否則生成的統計信息可能不準確 可以通過DBA_TABLES的LAST_ANALYZED列來查看錶是否經過分析或分析時間 索引可以通過DBA_INDEXES的LAST_ANALYZED列
下面通過例子來說明分析前後的速度對比 (表CASE_GA_AJZLZ大約有 萬數據 有主鍵)首先在SQLPLUS中打開自動查詢執行計劃功能 (第一次要執行RDBMSADMINutlxplan sql來創建PLAN_TABLE這個表)
SQL> SET AUTOTRACE ON SQL>SET TIMING ON
通過SET AUTOTRACE ON 來查看語句的執行計劃 通過SET TIMING ON 來查看語句運行時間
SQL> select count(*) from CASE_GA_AJZLZ; COUNT(*) 已用時間: : : Execution Plan SELECT STATEMENT Optimizer=CHOOSE SORT (AGGREGATE) TABLE ACCESS (FULL) OF CASE_GA_AJZLZ ……………………
請注意上面分析中的TABLE ACCESS(FULL) 這說明該語句執行了全表掃描 而且查詢使用了 秒 這時表還沒有經過分析 下面我們來對該表進行分析
SQL> *** yze table CASE_GA_AJZLZ pute statistics;
表已分析 已用時間: : : 然後再來查詢
SQL> select count(*) from CASE_GA_AJZLZ; COUNT(*) 已用時間: : : Execution Plan SELECT STATEMENT Optimizer=FIRST_ROWS (Cost= Card= ) SORT (AGGREGATE) INDEX (FAST FULL SCAN) OF PK_AJZLZ (UNIQUE) (Cost= Card= ) …………………………
請注意 這次時間僅僅用了 秒!這要歸功於INDEX(FAST FULL SCAN) 通過分析表 查詢使用了PK_AJZLZ索引 磁碟I/O大幅減少 速度也大幅提升!下面的實用語句可以
用來生成分析某個用戶的所有表和索引 假設用戶是GAXZUSR
SQL> set pagesize SQL> spool d: *** yze_tables sql; SQL> select *** yze table ||owner|| ||table_name|| pute statistics; from dba_tables where owner= GAXZUSR ; SQL> spool off SQL> spool spool d: *** yze_indexes sql; SQL> select *** yze index ||owner|| ||index_name|| pute statistics; from dba_indexes where owner= GAXZUSR ; SQL> spool off SQL> @d: *** yze_tables sql SQL> @d: *** yze_indexes sql
解釋 上面的語句生成了兩個sql文件 分別分析全部的GAXZUSR的表和索引 如果需要按照百分比來分析表 可以修改一下腳本 通過上面的步驟 我們就完成了對表和索引的分析 可以測試一下速度的改進啦 建議定期運行上面的語句 尤其是數據經過大量更新
當然 也可以通過dbms_stats來分析表和索引 更方便一些 但是我仍然習慣上面的方法 因為成功與否會直接提示出來
另外 我們可以將優化模式進行修改 optimizer_mode值可以是RULE CHOOSE FIRST_ROWS和ALL_ROWS 對於OLTP系統 可以改成FIRST_ROWS 來要求查詢盡快返回結果 這樣即使不用分析 在一般情況下也可以提高查詢性能 但是表和索引經過分析後有助於找到最合適的執行計劃
三.設置cursor_sharing=FORCE 或SIMILAR
這種方法是 i才開始有的 oracle 不支持 通過設置該參數 可以強制共享只有文字不同的語句解釋計劃 例如下面兩條語句可以共享
SQL> SELECT * FROM MYTABLE WHERE NAME= tom SQL> SELECT * FROM MYTABLE WHERE NAME= turner
這個方法可以大幅降低緩沖區利用率低的問題 避免語句重新解釋 通過這個功能 可以很大程度上解決硬解析帶來的性能下降的問題 個人感覺可根據系統的實際情況 決定是否將該參數改成FORCE 該參數默認是exact 不過一定要注意 修改之前 必須先給ORACLE打補丁 否則改之後oracle會佔用 %的CPU 無法使用 對於ORACLE i 可以設置成SIMILAR 這個設置綜合了FORCE和EXACT的優點 不過請慎用這個功能 這個參數也可能帶來很大的負面影響!
四.將常用的小表 索引釘在數據緩存KEEP池中
內存上數據讀取速度遠遠比硬碟中讀取要快 據稱 內存中數據讀的速度是硬碟的 倍!如果資源比較豐富 把常用的小的 而且經常進行全表掃描的表給釘內存中 當然是在好不過了 可以簡單的通過ALTER TABLE tablename CACHE來實現 在ORACLE i之後可以使用ALTER TABLE table STORAGE(BUFFER_POOL KEEP) 一般來說 可以考慮把 數據塊之內的表放在keep池中 當然要根據內存大小等因素來定 關於如何查出那些表或索引符合條件 可以使用本文提供的access sql和access_report sql 這兩個腳本是著名的Oracle專家 Burleson寫的 你也可以在讀懂了情況下根據實際情況調整一下腳本 對於索引 可以通過ALTER INDEX indexname STORAGE(BUFFER_POOL KEEP)來釘在KEEP池中
將表定在KEEP池中需要做一些准備工作 對於ORACLE i 需要設置DB_KEEP_CACHE_SIZE 對於 i 需要設置buffer_pool_keep 在 i中 還要修改db_block_lru_latches 該參數默認是 無法使用buffer_pool_keep 該參數應該比 * *CPU數量少 但是要大於 才能設置DB_KEEP_CACHE_BUFFER buffer_pool_keep從db_block_buffers中分配 因此也要小於db_block_buffers 設置好這些參數後 就可以把常用對象永久釘在內存里
五.設置optimizer_max_permutations
對於多表連接查詢 如果採用基於成本優化(CBO) ORACLE會計算出很多種運行方案
從中選擇出最優方案 這個參數就是設置oracle究竟從多少種方案來選擇最優 如果設置太大 那麼計算最優方案過程也是時間比較長的 Oracle 和 i默認是 建議改成 對於 i 已經默認是 了
六.調整排序參數
( ) SORT_AREA_SIZE:默認的用來排序的SORT_AREA_SIZE大小是 K 通常顯得有點小 一般可以考慮設置成 M( ) 這個參數不能設置過大 因為每個連接都要分配同樣的排序內存
lishixin/Article/program/Oracle/201311/18879