Oracle 11g系統自動收集統計信息

從Oracle?Database 10g開始,Oracle在建庫后就默認創建了一個名為GATHER_STATS_JOB的定時任務,用于自動收集CBO的統計信息,調用DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC收集統計信息。該過程首先檢測統計信息缺失和陳舊的對象。然后確定優先級,再開始進行統計信息。收集的規則是user_tab_modifications中操作的記錄數超過表的數量的10%,就會自動收集。

當表的數據量修改超過總數據量的10%,就會晚上自動收集統計信息,如何判斷10%。這個STALE_PERCENT=10%,是無法修改的,如果表非常大,10%是非常多的數據,非常有可能造成統計信息不準確。

? ? 在11g之后,STALE_PERCENT=10%是可以修改的,分為全局(DBMS_STATS.SET_GLOBAL_PREFS )和表級別(DBMS_STATS.SET_TABLE_PREFS)。表級別的設定:

? ? 修改為5%(范圍從1-100): exec dbms_stats.set_table_prefs(null,'table_name','STALE_PERCENT',5);
? ? 恢復為10%: exec dbms_stats.set_table_prefs(null,'table_name','STALE_PERCENT',null);
? ? 查詢百分比:select dbms_stats.get_prefs('STALE_PERCENT',null,'table_name') from dual;?

---11g的是 周一到周五 22:00-2:00 周六周日 6:00-4:00

SELECT w.window_name, w.repeat_interval, w.duration, w.enabled
FROM dba_autotask_window_clients c, dba_scheduler_windows w
WHERE c.window_name = w.window_name
AND c.optimizer_stats = 'ENABLED';
WINDOW_NAME? ? ? ? ? REPEAT_INTERVAL? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? DURATION
-------------------- ------------------------------------------------------------ ---------------
SUNDAY_WINDOW? ? ? ? freq=daily;byday=SUN;byhour=6;byminute=0; bysecond=0? ? ? ? +000 20:00:00
FRIDAY_WINDOW? ? ? ? freq=daily;byday=FRI;byhour=22;byminute=0; bysecond=0? ? ? ? +000 04:00:00
WEDNESDAY_WINDOW? ? freq=daily;byday=WED;byhour=22;byminute=0; bysecond=0? ? ? ? +000 04:00:00
SATURDAY_WINDOW? ? ? freq=daily;byday=SAT;byhour=6;byminute=0; bysecond=0? ? ? ? +000 20:00:00
THURSDAY_WINDOW? ? ? freq=daily;byday=THU;byhour=22;byminute=0; bysecond=0? ? ? ? +000 04:00:00
TUESDAY_WINDOW? ? ? freq=daily;byday=TUE;byhour=22;byminute=0; bysecond=0? ? ? ? +000 04:00:00
MONDAY_WINDOW? ? ? ? freq=daily;byday=MON;byhour=22;byminute=0; bysecond=0? ? ? ? +000 04:00:00

--禁用自動收集
exec DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'auto optimizer stats collection',operation => NULL,window_name => NULL);
--啟用自動收集
exec DBMS_AUTO_TASK_ADMIN.ENABLE(client_name => 'auto optimizer stats collection',operation => NULL,window_name => NULL);
--查看job

select client_name,status from dba_autotask_client;

CLIENT_NAME? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? STATUS
---------------------------------------------------------------- --------
auto optimizer stats collection? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ENABLED
auto space advisor? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ENABLED
sql tuning advisor? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ENABLED


--收集當前數據庫下所有用戶的統計信息
exec dbms_stats.gather_database_stats(user);
--收集當前數據庫用戶下所有對象的統計信息
exec dbms_stats.gather_schema_stats(user);
--收集數據字典的統計信息
exec dbms_stats.gather_dictionary_stats();?
--當系統有很大的分區表時,如果總是全部收集則會比較慢,11g之后可以設置INCREMENTAL只對數據有變動的分區做收集

exec dbms_stats.set_table_prefs(user,'table_name','INCREMENTAL','TRUE');--只收集數據變動的分區

exec dbms_stats.set_table_prefs(user,'table_name','INCREMENTAL','FALSE');--都要收集

select dbms_stats.get_prefs('INCREMENTAL',null,'table_name') from dual;--查看分區表INCREMENTAL的值


--獲取global的統計信息收集設置選項
select dbms_stats.get_prefs('method_opt') from dual;
select dbms_stats.get_prefs('concurrent') from dual;?
select dbms_stats.get_prefs('GRANULARITY') from dual;

select dbms_stats.get_prefs('INCREMENTAL') from dual;
--設置global的統計信息收集選項


exec DBMS_STATS.SET_PARAM('DEGREE',4);

exec DBMS_STATS.SET_PARAM('INCREMENTAL','TRUE');

關閉自動統計信息命令,exec DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB');

? ? 啟用自動統計信息命令,exec DBMS_SCHEDULER.ENABLE('GATHER_STATS_JOB');

? ? 查看自動統計信息是否開啟,

? ? oracle 10g :SELECT OWNER,JOB_NAME,ENABLED FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME = 'GATHER_STATS_JOB';
? ? oracle 11g :select t1.owner, t1.job_name, t1.enabled? from dba_scheduler_jobs t1? where t1.job_name = 'BSLN_MAINTAIN_STATS_JOB';

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535331.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535331.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535331.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis監控指標

監控指標 ?性能指標:Performance?內存指標: Memory?基本活動指標:Basic activity?持久性指標: Persistence?錯誤指標:Error 性能指標:Performance NameDescriptionlatencyRedis響應一個請求的時間instantaneous_ops_per_s…

innobackupex參數說明

1、備份: #常用參數     --user:該選項表示備份賬號。     --password:該選項表示備份的密碼。     --port:該選項表示備份數據庫的端口。     --host:該選項表示備份數據庫的地址。     --socket…

innobackupex遠程備份腳本

#!/bin/sh #備份主機 remote_ip10.2.142.161 Master_ip10.2.142.148 VIP103.2.132.136 #備份用戶 userroot #密碼 password123456 # 返回年月日 backup_datedate %F # 返回時分秒 backup_timedate %H-%M-%S # 返回今天是這周的第幾天 backup_week_daydate %u backup_ok0 #備份目…

MySQL管理利器 MySQL Utilities---mysqlreplicate

mysqlreplicate 工具是在兩臺服務器間設置和啟動復制。用戶提供登錄從服務器信息和連接到主的信息。也可以指定一個數據庫用于測試復制。 該工具報告條件是當主和從的存儲引擎不一樣時。如果主和從的存儲引擎不同將產生告警信息。對于Innodb存儲引擎而言,必需完全…

MySQL管理工具MySQL Utilities — 如何連接MySQL服務器

連接參數 連接到一個服務器,必須指定連接參數,如用戶名,主機名稱,密碼,端口號,socket。MySQL Utilities提供了三種提供這些參數的方法,這些方法都需要通過命令行指定。 使用.mylogin.cnf文件&…

MHA高可用

manager 組件 masterha_manger # 啟動MHA masterha_check_ssh # 檢查MHA的SSH配置狀況 masterha_check_repl # 檢查MySQL復制狀況,配置信息 masterha_master_monitor # 檢測master是否宕機 masterha_check_status # 檢測當…

MySQL Replication需要注意的問題

主庫意外宕機 如果沒有設置主庫的sync_binlog選項,就可能在奔潰前沒有將最后的幾個二進制日志事件刷新到磁盤中。備庫I/O線程因此也可一直處于讀不到尚未寫入磁盤的事件的狀態中。當主庫從新啟動時,備庫將重連到主庫并再次嘗試去讀該事件,但…

update和delete操作忘加where條件導致全表更新的處理方法

在數據庫日常維護中,開發人員是最讓人頭痛的,很多時候都會由于SQL語句寫的有問題導致服務器出問題,導致資源耗盡。最危險的操作就是在做DML操作的時候忘加where條件,導致全表更新,這是作為運維或者DBA的我們改如何處理…

Innodb結構

從MySQL5.5版本開始默認使用InnoDB作為引擎,它擅長處理事務,具有自動崩滿恢復的特性,在日常開發中使用非常廣泛,下面是言方的InnoDB引擎美構圖,主要分為內存結構和磁盤結構兩大部分。 內存結構主要包括Buffer Pool、C…

ES備份工具elasticdump

安裝 下載node下載 | Node.js 中文網 tar xvf node-v16.5.0-linux-x64.tar.xz ln -s /app/temp/node-v16.5.0-linux-x64/bin/node /usr/bin/node ln -s /app/temp/node-v16.5.0-linux-x64/bin/npm /usr/bin/npm npm install elasticdump -g npm config get cache npm in…

innodb_flush_method理解【轉】

innodb_flush_method這個參數控制著innodb數據文件及redo log的打開、刷寫模式,對于這個參數,文檔上是這樣描述的: 有三個值:fdatasync(默認),O_DSYNC,O_DIRECT 默認是fdatasync,調用fsync()去…

linux下的/dev/shm/

首先可以看出來/dev/shm是一個設備文件, 可以把/dev/shm看作是系統內存的入口, 可以把它看做是一塊物理存儲設備,一個tmp filesystem, 你可以通過這個設備向內存中讀寫文件, 以加快某些I/O高的操作,比如對一個大型文件頻繁的open, write, read&#xff0…

2021-07-30

1.服務器級別的鎖等待 可以通過show processlist看到等待鎖的線程id,但是無法知道究竟哪個線程持有鎖 可以通過mysqladmin debug 相關等待鎖的線程以及誰持有鎖可以在錯誤日志中找到 2.存儲引擎層的鎖等待則比較麻煩,以下是innodb存儲引擎中鎖等待以及…

getopt設計shell腳本選項

寫shell腳本的時候,通過while、case、shift來設計腳本的命令行選項是一件比較麻煩的事,因為Unix命令行的選項和參數自由度很高,支持短選項和長選項,參數可能是可選的,選項順序可能是無所謂的,等等。 bash下…

percona-toolkit---pt-heartbeat

對于MySQL數據庫主從復制延遲的監控,可以借助percona的有力武器pt-heartbeat來實現。 pt-heartbeat的工作原理通過使用時間戳方式在主庫上更新特定表,然后在從庫上讀取被更新的時間戳然后與本地系統時間對比來得出其延遲。具體流程: 1&…

定時刪除腳本

#!/bin/sh backup_dir/data/xtrabackup DATEdate %Y-%m-%d #DATE_NOWdate %Y-%m-%d.%H%M DATE_NOWdate %Y-%m-%d PATH/usr/local/mysql/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin export PATHbinog保留7天 binlog/data/binlogserver binlog_Rtime7#備…

percona-toolkit--pt-table-checksum

pt-table-checksum 是 Percona-Toolkit的組件之一,用于檢測MySQL主、從庫的數據是否一致。其原理是在主庫執行基于statement的sql語句來生成主庫數據塊的checksum,把相同的sql語句傳遞到從庫執行,并在從庫上計算相同數據塊的checksum&#xf…

Docker容器間網絡通信

自從Docker容器出現以來,容器網絡通信就一直是被關注的焦點,也是生產環境的迫切需求。容器網絡通信又分為兩大方面:單主機容器上的相互通信,和跨主機的容器相互通信。 一、Docker單主機容器通信 基于對net namespace的控制&#…

Docker容器的重啟策略

1. Docker容器的重啟策略 Docker容器的重啟策略是面向生產環境的一個啟動策略,在開發過程中可以忽略該策略。 Docker容器的重啟都是由Docker守護進程完成的,因此與守護進程息息相關。 Docker容器的重啟策略如下: no,默認策略&…

innobackupex實現導出和導入單張表

默認情況下,InnoDB表不能通過直接復制表文件的方式在mysql服務器之間進行移植,即便使用了innodb_file_per_table選項。而使用Xtrabackup工具可以實現此種功能,不過只能"導出"具有.ibd文件的表,也就是說導出表的mysql服務…