偶然的實驗,查詢兩條記錄的全表很久,10046真好用...
作業系統版本:
資料庫版本:
查詢現象:
實驗過程:
一開始還以為Ctrl+c中斷後,記錄應該是超過兩條的,沒想到中斷會回滾。
做了下10046,以下擷取一部分。
看來原因是高水位線被提高了。
如何驗證高水位線被抬高了呢?可以查詢dba_extents檢視,但是該方法不清楚高水位線在哪裡。
以下是查詢高水位線過程。
擷取部分proc_ora_3974.trc檔案內容。
其中,Highwater即是高水位線。
由此得到高水位線的地址是4號檔案的148864號塊。一般這裡可以猜測表最新的區最後塊的地址為4,148863。
驗證以下。
140672+8192-1=148863剛好是這樣。
-
[oracle@oracle trace]$ uname -a
-
Linux oracle.example.com 2.6.32-431.el6.x86_64 #1 SMP Sun Nov 10 22:19:54 EST 2013 x86_64 x86_64 x86_64 GNU/Linux
-
[oracle@oracle trace]$ lsb_release -a
-
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
-
Distributor ID: RedHatEnterpriseServer
-
Description: Red Hat Enterprise Linux Server release 6.5 (Santiago)
-
Release: 6.5
- Codename: Santiago
資料庫版本:
-
SYS@proc> select * from v$version where rownum=1;
-
-
BANNER
-
--------------------------------------------------------------------------------
- Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
查詢現象:
-
ZKM@proc> select count(*) from t;
-
-
COUNT(*)
-
----------
-
2
-
- Elapsed: 00:00:20.66
實驗過程:
-
ZKM@proc> create table t(id int);
-
-
Table created.
-
-
ZKM@proc> insert into t values(1);
-
-
1 row created.
-
-
ZKM@proc> c/1/2
-
1* insert into t values(2)
-
ZKM@proc> /
-
-
1 row created.
-
-
ZKM@proc> commit;
-
-
Commit complete.
-
-
ZKM@proc> select * from t;
-
-
ID
-
----------
-
1
-
2
-
-
ZKM@proc> select bytes from dba_segments where segment_name='T' and owner='ZKM';
-
-
BYTES
-
----------
- 65536
-
-
ZKM@proc> set timing on
-
ZKM@proc> begin
-
for i in 1..100000 loop
-
insert into t select * from t;
-
end loop;
- commit;
-
end;
-
/
-
^C
-
*
-
ERROR at line 1:
-
ORA-01013: user requested cancel of current operation
-
ORA-06512: at line 3
-
-
- Elapsed: 00:18:15.08
- ZKM@proc> select count(*) from t;
-
- COUNT(*)
- ----------
- 2
-
- Elapsed: 00:00:20.66
做了下10046,以下擷取一部分。
- ...
-
WAIT #140653717427600: nam='SQL*Net message to client' ela= 2 driver id=1650815232 #bytes=1 p3=0 obj#=88856 tim=1509951777507463
-
WAIT #140653717427600: nam='direct path read' ela= 191 file number=4 first dba=561 block cnt=15 obj#=88856 tim=1509951777507731
-
WAIT #140653717427600: nam='direct path read' ela= 37 file number=4 first dba=577 block cnt=15 obj#=88856 tim=1509951777507869
-
WAIT #140653717427600: nam='direct path read' ela= 38 file number=4 first dba=593 block cnt=15 obj#=88856 tim=1509951777507979
-
WAIT #140653717427600: nam='direct path read' ela= 37 file number=4 first dba=609 block cnt=15 obj#=88856 tim=1509951777508083
-
WAIT #140653717427600: nam='direct path read' ela= 43 file number=4 first dba=625 block cnt=15 obj#=88856 tim=1509951777508300
-
WAIT #140653717427600: nam='direct path read' ela= 39 file number=4 first dba=641 block cnt=15 obj#=88856 tim=1509951777508435
-
WAIT #140653717427600: nam='direct path read' ela= 126 file number=4 first dba=770 block cnt=14 obj#=88856 tim=1509951777508630
-
WAIT #140653717427600: nam='direct path read' ela= 183 file number=4 first dba=784 block cnt=16 obj#=88856 tim=1509951777508886
-
WAIT #140653717427600: nam='direct path read' ela= 287 file number=4 first dba=800 block cnt=16 obj#=88856 tim=1509951777509248
-
WAIT #140653717427600: nam='direct path read' ela= 153 file number=4 first dba=816 block cnt=16 obj#=88856 tim=1509951777509512
-
WAIT #140653717427600: nam='direct path read' ela= 145 file number=4 first dba=832 block cnt=16 obj#=88856 tim=1509951777509738
-
WAIT #140653717427600: nam='direct path read' ela= 121 file number=4 first dba=848 block cnt=16 obj#=88856 tim=1509951777509935
-
WAIT #140653717427600: nam='direct path read' ela= 41 file number=4 first dba=864 block cnt=16 obj#=88856 tim=1509951777510055
-
WAIT #140653717427600: nam='direct path read' ela= 263 file number=4 first dba=880 block cnt=16 obj#=88856 tim=1509951777510389
-
WAIT #140653717427600: nam='direct path read' ela= 38 file number=4 first dba=898 block cnt=14 obj#=88856 tim=1509951777510526
-
WAIT #140653717427600: nam='direct path read' ela= 38 file number=4 first dba=912 block cnt=16 obj#=88856 tim=1509951777510637
-
WAIT #140653717427600: nam='direct path read' ela= 38 file number=4 first dba=928 block cnt=16 obj#=88856 tim=1509951777510740
-
WAIT #140653717427600: nam='direct path read' ela= 38 file number=4 first dba=944 block cnt=16 obj#=88856 tim=1509951777510849
-
WAIT #140653717427600: nam='direct path read' ela= 39 file number=4 first dba=960 block cnt=16 obj#=88856 tim=1509951777510959
-
WAIT #140653717427600: nam='direct path read' ela= 40 file number=4 first dba=976 block cnt=16 obj#=88856 tim=1509951777511070
-
WAIT #140653717427600: nam='direct path read' ela= 44 file number=4 first dba=992 block cnt=16 obj#=88856 tim=1509951777511235
-
WAIT #140653717427600: nam='direct path read' ela= 38 file number=4 first dba=1008 block cnt=16 obj#=88856 tim=1509951777511354
-
WAIT #140653717427600: nam='direct path read' ela= 33 file number=4 first dba=1026 block cnt=14 obj#=88856 tim=1509951777511460
-
WAIT #140653717427600: nam='direct path read' ela= 37 file number=4 first dba=1040 block cnt=16 obj#=88856 tim=1509951777511567
-
WAIT #140653717427600: nam='direct path read' ela= 37 file number=4 first dba=1056 block cnt=16 obj#=88856 tim=1509951777511668
- WAIT #140653717427600: nam='direct path read' ela= 35 file number=4 first dba=1072 block cnt=16 obj#=88856 tim=1509951777511775
- ....
-
ZKM@proc> select bytes,bytes/1024/1024 M from dba_segments where segment_name='T' and owner='ZKM';
-
-
BYTES M
-
---------- ----------
- 1214251008 1158
如何驗證高水位線被抬高了呢?可以查詢dba_extents檢視,但是該方法不清楚高水位線在哪裡。
以下是查詢高水位線過程。
-
SYS@proc> select HEADER_FILE,HEADER_BLOCK from dba_segments where owner='ZKM' and segment_name='T'; --L3塊地址
-
-
HEADER_FILE HEADER_BLOCK
-
----------- ------------
-
4 530
-
-
Elapsed: 00:00:00.12
-
SYS@proc> alter system dump datafile 4 block 530;
-
-
System altered.
-
-
Elapsed: 00:00:00.22
-
-
SYS@proc> select value from v$diag_info where name like '%De%';
-
-
VALUE
-
----------------------------------------------------------------------
-
/u01/app/oracle/diag/rdbms/proc_stb/proc/trace/proc_ora_3974.trc
-
- Elapsed: 00:00:00.22
-
Extent Control Header
-
-----------------------------------------------------------------
-
Extent Header:: spare1: 0 spare2: 0 #extents: 202 #blocks: 148224
-
last map 0x00000000 #maps: 0 offset: 2716
-
Highwater:: 0x01024580 ext#: 201 blk#: 8192 ext size: 8192
- #blocks in seg. hdr
-
SYS@proc> select to_number('01024580','xxxxxxxx') from dual;
-
-
TO_NUMBER('01024580','XXXXXXXX')
-
--------------------------------
-
16926080
-
-
Elapsed: 00:00:00.02
-
SYS@proc> select dbms_utility.data_block_address_file(16926080) from dual;
-
-
DBMS_UTILITY.DATA_BLOCK_ADDRESS_FILE(16926080)
-
----------------------------------------------
-
4
-
-
Elapsed: 00:00:00.27
-
SYS@proc> select dbms_utility.data_block_address_block(16926080) from dual;
-
-
DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK(16926080)
-
-----------------------------------------------
-
148864
-
- Elapsed: 00:00:00.00
驗證以下。
-
SYS@proc> select * from (select EXTENT_ID,FILE_ID,BLOCK_ID,BLOCKS from dba_extents where owner='ZKM' and SEGMENT_NAME='T' order by 1 desc) where rownum=1;
-
-
EXTENT_ID FILE_ID BLOCK_ID BLOCKS
-
---------- ---------- ---------- ----------
- 201 4 140672 8192
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30174570/viewspace-2146898/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MongoDB隨機查詢返回一條或N條記錄的方法MongoDB隨機
- mysql 查詢記錄數大於一千萬的表MySql
- SQL:查詢每個類別最新的5條記錄SQL
- 查詢條件和條數,先查詢兩條免費的,後面為vip
- Mysql-基本練習(09-刪除單表記錄、查詢指定列資料、列的別名、簡單單表條件查詢、簡單分組查詢)MySql
- Linq兩個from查詢條件
- SSH:hiberate實現資料的查詢(單查詢和全查詢)
- 報表查詢條件的 N 種使用方式
- mongodb索引--1億條記錄的查詢從55.7秒到毫秒級別MongoDB索引
- efcore 跨表查詢,實現一個介面內查詢兩個不同資料庫裡各自的表資料資料庫
- mysql查詢表中日期最大的那條資料MySql
- mybatis一對多查詢resultMap只返回了一條記錄MyBatis
- 兩表關聯查詢:sql、mybatisSQLMyBatis
- SQL 兩個表組合查詢SQL
- JavaScript身份證真偽查驗介面廠家有哪些?身份證查詢真偽JavaScript
- 怎麼用一條sql查詢出前兩條是免費的下面全是vip的SQL
- Mysql-基本練習(10-設定分組條件、查詢結果排序、限制查詢結果返回的數量、TRUNCATE刪除表記錄)MySql排序
- 實驗七: 查詢演算法的實現演算法
- 查詢SQL Server的歷史執行記錄SQLServer
- 查詢當天的系統訂單記錄
- 同一張表的兩個欄位比較查詢
- 資料庫全表查詢之-分頁查詢優化資料庫優化
- mysql 隨機查詢記錄MySql隨機
- BST查詢結構與折半查詢方法的實現與實驗比較
- 一條select的查詢的過程
- 谷歌收錄批次查詢,教你批次查詢谷歌收錄的方法谷歌
- 各種免費好用的api,含天氣查詢、IP查詢、物流查詢等API
- django 兩個表或多個表聯合查詢Django
- Spring boot+Mybatis,實現後端統計兩張無法關聯的表中的總戶數,總人數,而後拼接為一條記錄,返回分頁查詢page給前端Spring BootMyBatis後端前端
- 記錄一次遞迴查詢的運用遞迴
- [記錄] 很久不用的 Mac OS X 開發環境搭建Mac開發環境
- 【記錄】SSH分頁查詢功能
- 按條件查出兩條記錄後求其位置間隔
- 【面經】面試官:如何以最高的效率從MySQL中隨機查詢一條記錄?面試MySql隨機
- JN專案-時間查詢條件驗證
- 查詢皮膚中如何實現兩個 select 下拉框的關聯查詢?
- mysql中一條查詢語句的執行全過程是怎樣的?MySql
- 谷歌收錄批次查詢,谷歌收錄批次查詢的方法步驟谷歌
- 寫一個“特殊”的查詢構造器 – (四、條件查詢:複雜條件)