驗證Oracle收集統計信息參數granularity數據分析的力度

?

? ?最近在學習Oracle的統計信息這一塊,收集統計信息的方法如下:? ?

DBMS_STATS.GATHER_TABLE_STATS (
ownname VARCHAR2, ---所有者名字
tabname VARCHAR2, ---表名
partname VARCHAR2 DEFAULT NULL, ---要分析的分區名
estimate_percent NUMBER DEFAULT NULL, ---采樣的比例
block_sample BOOLEAN DEFAULT FALSE, ---是否塊分析
method_opt VARCHAR2 DEFAULT ‘FOR ALL COLUMNS SIZE 1’,---分析的方式
degree NUMBER DEFAULT NULL, ---分析的并行度
granularity VARCHAR2 DEFAULT ‘DEFAULT’, ---分析的粒度
cascade BOOLEAN DEFAULT FALSE, ---是否分析索引
stattab VARCHAR2 DEFAULT NULL, ---使用的性能表名
statid VARCHAR2 DEFAULT NULL, ---性能表標識
statown VARCHAR2 DEFAULT NULL, ---性能表所有者
no_invalidate BOOLEAN DEFAULT FALSE, ---是否驗證游標依存關系
force BOOLEAN DEFAULT FALSE); ---強制分析,即使鎖表

? 本文主要對參數granularity進行了一下驗證,

? granularity:數據分析的力度

? --global ?---全局

? --partition ---只在分區級別做分析

? --subpartition ?--只在子分區級別做分析

驗證步驟如下:

一、創建一個分區表并插入兩條數據,同時在字段ID上創建索引
drop table test purge;
create table test(id number) partition by range(id)
(partition p1 values less than (5),
partition p2 values less than (10)
) ;
insert into test values(1);
insert into test values(6);
commit;
create index ind_id on test(id);
二、收集表的統計信息
exec dbms_stats.gather_table_stats(user,'TEST',cascade=>true);
三、查詢表的統計信息
select num_rows,blocks,last_analyzed from user_tables where table_name = 'TEST';
結果如下:
num_rows:表數據行數
blocks:數據塊數
last_analyzed:最近分析時間
四、查詢表分區信息
select partition_name,num_rows,blocks,last_analyzed from dba_tab_partitions where table_name ='TEST';
PARTITION_NAME:分區名稱
NUM_ROWS:數據行數
BLOCKS:數據塊數
last_analyzed:最近分析時間
五、查詢索引統計信息
select num_rows,blevel,last_analyzed from user_indexes where index_name = 'IND_ID';
num_rows:索引數據行數
blevel:索引高度
last_analyzed:分析時間
六、新增一個分區
alter table test add partition pmax values less than(maxvalue);
七、往新的分區中插入10000條數據
begin for i in 1..10000 loop ---插入10000條數據
insert into test values(100);
end loop;
commit;
end;
八、創建一個傾斜度非常大的分區
update test set id=10000 where id=100 and rownum=1; ---創造一個非常傾斜的Pmax分區
Commit;
九、查詢分區數據
select id,count(*) from test partition(pmax) group by id;
十、不做分析,再次查詢表的統計信息
select num_rows,blocks,last_analyzed from user_tables where table_name = 'TEST';
發現數據行數量和數據塊數量沒有發現變化
十一、查詢id=100時執行計劃
set autotrace traceonly
set linesize 1000
select * from test where id=100;
發現走了索引,正常情況下,因為id=100的數據在一個傾斜度非常高的分區pmax中,id為100的數據有9999條,走索引的代價會比走全表的代價還要高(因為走索引需要回表),如果統計信息正確,優化器應該會選擇走全表,但是這里沒走全表而是走了索引,這里懷疑是統計信息不正確導致,后面驗證
十二、收集分區統計信息
exec dbms_stats.gather_table_stats(user,'TEST',partname => 'PMAX',granularity => 'PARTITION');
十三、再次查詢表的統計信息和分區統計信息
select partition_name,num_rows,blocks,last_analyzed from dba_tab_partitions where table_name ='TEST';
發現和步驟四比較,分區信息有了變化,說明對分區進行統計信息收集后,分區信息進行了更新
select num_rows,blocks,last_analyzed from user_tables where table_name = 'TEST';
發現和步驟三想比,表的統計信息并沒有發生變化,說明統計了分區信息后,表的統計信息么有更新

?

十四、再次查詢id=100的數據
仍然走索引,說明在評估查詢的時候,表的統計信息依然陳舊
十五、查詢索引的統計信息
select num_rows,blevel,last_analyzed from user_indexes where index_name = 'IND_ID';
發現索引統計信息較步驟五沒有變化,說明收集了分區的統計信息后,表的索引信息沒有更新

?

?

十六、重新再次收集表的統計信息
exec dbms_stats.gather_table_stats(user,'TEST',cascade =>true);
十七、查詢表的統計信息以及索引的統計信息
select num_rows,blocks,last_analyzed from user_tables where table_name = 'TEST';
表的統計信息已經更新
select num_rows,blevel,last_analyzed from user_indexes where index_name = 'IND_ID';
索引的統計信息也已經更新
十八、再次查詢id=100的執行計劃
這次發現走了全表,說明收集了全局的統計信息后,表的統計信息準確了,評估也就準確了。

轉載于:https://www.cnblogs.com/jerome-lamb/p/7535014.html

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

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

相關文章

Python之NumPy(axis=0 與axis=1)區分

Python之NumPy(axis0 與axis1)區分 轉載于:https://www.cnblogs.com/greatljg/p/10802392.html

Python Web開發:開發wsgi中間件

本文參考了: github.com/alanctkc/ws…Youtube : Creating WSGI Middleware上篇文章簡要提到:wsgi 規范中的 app 是一個可調用對象,可以通過嵌套調用的方式實現中間件的功能。這篇文章就來親自動手實現一下。 此文的重點在于 app 端&#xff…

20165320 第九周學習總結

主要內容: 1.URL類 URL類是java.net包中的一個重要的類,使用URL創建對象的應用程序稱為客戶端程序。URL 的構造方法:try { URL url new URL ("http://www.google.com"); } catch (MalformedURLException e) {System.out.println(&…

Python 函數的執行流程-函數遞歸-匿名函數-生成器

1 函數的執行流程函數的執行需要對函數進行壓棧的,什么是壓棧呢,簡而言之就是在函數執行時在棧中創建棧幀存放需要變量以及指針的意思。具體涉及的知識非常多,這里就已一個Python腳本簡單進行分析。當我們運行上面代碼時,它的執行…

python 課堂筆記-for語句

for i in range(10):print("----------",i)for j in range(10):print("world",j)if j> 5:break 轉載于:https://www.cnblogs.com/leon-zyl/p/7542466.html

【2】信息的表示和處理

1.現代計算機存儲和處理的信息都以二值信號表示。 2.機器為什么要使用二進制進行存儲和處理? 答:二值信號能夠很容易的被表示、存儲、傳輸。例如: 可以表示為穿孔卡片上有洞和無洞、導線上的高壓和低壓,順逆時針的磁場。 3.大多數…

java版b2b2c社交電商spring cloud分布式微服務(二) 服務消費者(rest+ribbon)

一、ribbon簡介 Ribbon is a client side load balancer which gives you a lot of control over the behaviour of HTTP and TCP clients. Feign already uses Ribbon, so if you are using FeignClient then this section also applies. —–摘自官網 ribbon是一個負載均衡客…

[學習筆記]支配樹

被支配樹支配的恐懼 定義 顯然,這個支配關系是一個樹(或者如果有的點不能從r到達,就是一個樹一堆點)。 首先不會成環,其次也不會是DAG 即如果A支配C,B支配C,那么A和B之間必然有支配關系 解法 首…

RBAC 權限設計(轉載)

來源 :https://blog.csdn.net/rocher88/article/details/43190743 這是我在網上找的一些設計比較好的RBAC權限管理不知道,像新浪、搜狐、網易、百度、阿里巴巴、淘寶網的RBAC用戶權限這一塊,都是這種細顆粒的RBAC設計開發,還是把他…

54.get set

當程序查詢對象屬性時調用get方法,如果只有get方法那么他是一個只讀屬性&#xff0c;//程序對對象屬性進行賦值操作時調用set方法&#xff0c;如果只有set方法那么他是是一個只讀屬性 <script type"text/javascript">var p {x:1.0,y:1.0,//當程序查詢對象屬性…

Codeforces Round #554 Div.2 E - Neko and Flashback

歐拉路徑 神題啊神題&#xff01;這道題的突破口就是后兩個數組每個元素是一一對應的。 也就是說&#xff0c;對于一個p的排列&#xff0c;b和c取得每一個元素的下標在p中都是一樣的。 根據b和c數組的性質可以得出&#xff0c;b[i] < c[i]。 這也是我們輸出-1的一個判斷方法…

20172311 2017-2018-2 《程序設計與數據結構》第八周學習總結

20172311 2017-2018-2 《程序設計與數據結構》第八周學習總結 教材學習內容總結 本周對JAVA中的多態性進行了學習 多態性引用能夠隨時間變化指向不同類型的對象&#xff0c;是通過后綁定實現的。實現多態性的主要途徑有兩種&#xff1a; 1.由繼承實現多態性 2.利用接口實現多態…

Linux系統安裝Apache 2.4.6

http://www.cnblogs.com/kerrycode/p/3261101.html Apache簡介 Apache HTTP Server&#xff08;簡稱Apache&#xff09;是Apache軟件基金會的一個開放源碼的網頁服務器&#xff0c;可以在大多數計算機操作系統中運行&#xff0c;由于其多平臺和安全性被廣泛使用&#xff0c;是最…

深淺拷貝

lst1 ["金毛獅王", "紫衫龍王", "白眉鷹王", "青翼蝠王"] lst2 lst1 print(lst1) print(lst2) lst1.append("楊逍") print(lst1) print(lst2) # 結果: # [金毛獅王, 紫衫龍王, 白眉鷹王, 青翼蝠王, 楊逍] # [金毛獅王 紫衫…

lnmp化境開啟pathinfo,支持tp5.0等訪問

一、 開啟pathinfo   #注釋 下面這一行 #include enable-php.conf #載入新的配置文件 include enable-php-pathinfo.conf #添加如下location / {if (!-e $request_filename){rewrite ^/(.*)$ /index.php/$1 last;break;}}location ~ /index.php {fastcgi_pass 127.0.0.1:…

深度解密GO語言之反射

反射和 Interface 息息相關&#xff0c;而 Interface 是我們上一篇文章的內容。在開始正文前&#xff0c;和大家說點題外話。 上一篇關于 Interface 的文章發出后&#xff0c;獲得了很多的關注和閱讀。比如&#xff0c;登上了 GoCN 的每日新聞第一條&#xff1a; 可能是編輯者覺…

Python爬蟲-正則表達式

正則表達式 只提取關注的數據&#xff0c;進行數據賽選 原子&#xff1a; 基本組成單位 普通的字符 非打印支付 通用字符 普通的字符 >>> import re >>> pat"yue" >>> string"http://yum.iqianyue.com" >>> rst1re.se…

openfire(一):使用idea編譯openfire4.2.3源碼

最近公司項目要使用openfire&#xff0c;并對源碼做一些修改&#xff0c;使用的openfire版本為官網目前最新版本4.2.3&#xff0c;網上資料較少&#xff0c;踩了很多坑&#xff0c;特此記錄。 1.下載源碼 http://www.igniterealtime.org/downloads/source.jsp 2.使用idea導入源…

JAVA synchronized關鍵字鎖機制(中)

synchronized 鎖機制簡單的用法&#xff0c;高效的執行效率使成為解決線程安全的首選。 下面總結其特性以及使用技巧&#xff0c;加深對其理解。 特性: 1. Java語言的關鍵字&#xff0c;當它用來修飾一個方法或者一個代碼塊的時候&#xff0c;能夠保證在同一時刻最多只有一個線…

Python多線程豆瓣影評API接口爬蟲

爬蟲庫 使用簡單的requests庫&#xff0c;這是一個阻塞的庫&#xff0c;速度比較慢。 解析使用XPATH表達式 總體采用類的形式 多線程 使用concurrent.future并發模塊&#xff0c;建立線程池&#xff0c;把future對象扔進去執行即可實現并發爬取效果 數據存儲 使用Python ORM sq…