[20170224]nocache工具的小测试2.txt

[20170224]nocache工具的小测试2.txt

http://blog.itpub.net/267265/viewspace-2134054/

--前面我测试读取oracle某个数据块时,文件系统缓存会64K,而且并不是该块开始,而是整齐画一的64K.
--今天看看如果读取文件呢?

1.环境:

$ ls -l alert_book.log
-rw-r----- 1 oracle oinstall 4279050 2017-02-24 08:38:22 alert_book.log

$ cachedel  alert_book.log

2.测试使用dd:
$ dd if=alert_book.log skip=4096 bs=1 count=1

1+0 records in
1+0 records out
1 byte (1 B) copied, 0.000154046 seconds, 6.5 kB/s

$ cachestats -v alert_book.log
alert_book.log                           pages in cache: 1/1045 (0.1%)  [filesize=4178.8K, pagesize=4K]

cache map:
     0: | |x| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
    32: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |

--//正好读取1块.也是4K分,第2块的位置.测试读3块看看并使用strce跟踪看看:

$ cachedel -n 2 alert_book.log
$ cachestats -v alert_book.log
alert_book.log                           pages in cache: 0/1045 (0.0%)  [filesize=4178.8K, pagesize=4K]

cache map:
     0: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
    32: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
    64: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |

$ strace -o /tmp/dd.txt  dd if=alert_book.log skip=8192 bs=1 count=1
g1+0 records in
1+0 records out
1 byte (1 B) copied, 0.000604916 seconds, 1.7 kB/s

$ cachestats -v alert_book.log
alert_book.log                           pages in cache: 1/1045 (0.1%)  [filesize=4178.8K, pagesize=4K]

cache map:
     0: | | |x| | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
    32: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |

ioctl(0, MGSL_IOCSTXIDLE or MTIOCGET or SNDCTL_MIDI_MPUCMD, 0x7fff6ce0b100) = -1 ENOTTY (Inappropriate ioctl for device)
lseek(0, 8192, SEEK_CUR)                = 8192
read(0, "g", 1)                         = 1
write(1, "g", 1)                        = 1
close(0)                                = 0
close(1)                                = 0

--//可以发现精确读取第3块的位置(pagesize=4K).写出如下
$ cachedel -n 2 alert_book.log
$ dd if=alert_book.log of=/dev/null skip=2 bs=4096 count=1
--//也是一样.

$ cachestats -v alert_book.log
alert_book.log                           pages in cache: 1/1045 (0.1%)  [filesize=4178.8K, pagesize=4K]

cache map:
     0: | | |x| | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
    32: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |

--//使用bvi工具看看:(执行前先执行cachedel -n 2 alert_book.log)
$ env COLUMNS=266 bvi -b 8192 -s 1 alert_book.log

--//发现结果也与前面的测试一样.难道读取64K是oracle相关吗?还是回到数据库测试看看.

3.数据库环境:
SCOTT@book> @ &r/ver1

PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

SYS@book> show parameter filesystem
NAME                 TYPE   VALUE
-------------------- ------ ------
filesystemio_options string none

--//注:这次测试没执行这条语句.而是直接执行select rowid,dept.* from dept where rowid='AAAVRCAAEAAAACHAAA';.
SCOTT@book> select rowid,dept.* from dept ;
ROWID                  DEPTNO DNAME          LOC
------------------ ---------- -------------- -------------
AAAVRCAAEAAAACHAAA         10 ACCOUNTING     NEW YORK
AAAVRCAAEAAAACHAAB         20 RESEARCH       DALLAS
AAAVRCAAEAAAACHAAC         30 SALES          CHICAGO
AAAVRCAAEAAAACHAAD         40 OPERATIONS     BOSTON

SCOTT@book> @ &r/rowid AAAVRCAAEAAAACHAAA
    OBJECT       FILE      BLOCK        ROW ROWID_DBA            DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- -------------------- ----------------------------------------
     87106          4        135          0  0x1000087           4,135                alter system dump datafile 4 block 135 ;

$ cachedel  /mnt/ramdisk/book/users01.dbf

SCOTT@book> select rowid,dept.* from dept where rowid='AAAVRCAAEAAAACHAAA';
ROWID                  DEPTNO DNAME          LOC
------------------ ---------- -------------- -------------
AAAVRCAAEAAAACHAAA         10 ACCOUNTING     NEW YORK

$ cachestats -v /mnt/ramdisk/book/users01.dbf  | head -16
/mnt/ramdisk/book/users01.dbf            pages in cache: 18/32770 (0.1%)  [filesize=131080.0K, pagesize=4K]
cache map:
     0: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
    32: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
    64: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
    96: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
   128: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
   160: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
   192: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
   224: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
   256: | | | | | | | | | | | | | | |x|x| | | | | | | | | | | | | | | | |
   288: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
   320: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
   352: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
   384: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |

--//这次就正确了.而且缓存就是2块(pagesize=4K).为什么前面的测试缓存64K呢?而且前面的测试我自己重复测试多次.

--//噢,仔细想想明白了,当时我的测试先执行:
select rowid,dept.* from dept ;
--//然后再执行如下:
alter system flush buffer_cache;
$ cachedel  /mnt/ramdisk/book/users01.dbf
select rowid,dept.* from dept where rowid='AAAVRCAAEAAAACHAAA';
$ cachestats -v /mnt/ramdisk/book/users01.dbf  | head -16

--//这样就出现前面第一次测试的情况.而这次一上来就执行:
alter system flush buffer_cache;
$ cachedel  /mnt/ramdisk/book/users01.dbf
select rowid,dept.* from dept where rowid='AAAVRCAAEAAAACHAAA';
$ cachestats -v /mnt/ramdisk/book/users01.dbf  | head -16

--//两者的差别是仅仅开始是否执行了select rowid,dept.* from dept ; 语句.
--//从另外一个方面也说明与加载的数据块有关.
--//在执行select rowid,dept.* from dept ;后相关的数据库已经读入数据缓存.

SCOTT@book> select * from dba_extents where owner=user and segment_name='DEPT';
OWNER  SEGMENT_NAME PARTITION_NAME SEGMENT_TYPE TABLESPACE_NAME  EXTENT_ID    FILE_ID   BLOCK_ID      BYTES     BLOCKS RELATIVE_FNO
------ ------------ -------------- ------------ --------------- ---------- ---------- ---------- ---------- ---------- ------------
SCOTT  DEPT                        TABLE        USERS                    0          4        128      65536          8            4
--//128,128+8-1=135之间.

SCOTT@book> select HEADER_FILE,HEADER_BLOCK from dba_segments where owner=user and segment_name='DEPT';
HEADER_FILE HEADER_BLOCK
----------- ------------
          4          130
--//段头在130块,而相关数据在135块.

--//执行select rowid,dept.* from dept ; 执行计划如下:

PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID  2mrphdnp9mw7q, child number 1
-------------------------------------
select rowid,dept.* from dept
Plan hash value: 3383998547
--------------------------------------------------------------------------------------------------------------------
| Id  | Operation         | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time   | A-Rows |   A-Time   | Buffers |
--------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |      1 |        |       |     3 (100)|          |      4 |00:00:00.01 |       7 |
|   1 |  TABLE ACCESS FULL| DEPT |      1 |      4 |    80 |     3   (0)| 00:00:01 |      4 |00:00:00.01 |       7 |
--------------------------------------------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
   1 - SEL$1 / DEPT@SEL$1

--//要逻辑读7,130,131,132,133,134,135块.(6块).

SCOTT@book> alter system flush buffer_cache;
System altered.
--//这样的对应的数据块在缓存被清除,标识为free

SYS@book> @ &r/bh 4 134
HLADDR           DBARFIL      DBABLK CLASS CLASS_TYPE         STATE             TCH CR_SCN_BAS CR_SCN_WRP CR_UBA_FIL CR_UBA_BLK CR_UBA_SEQ BA               OBJECT_NAME
---------------- ------- ----------- ----- ------------------ ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------------- --------------------
0000000084B66B38       4         134     0                    free                0          0          0          0          0          0 000000007043A000 DEPT
0000000084B66B38       4         134     0                    free                0          0          0          0          0          0 0000000072024000 DEPT
0000000084B66B38       4         134     1 data block         free                0          0          0          0          0          0 0000000072638000 DEPT

SCOTT@book> select rowid,dept.* from dept where rowid='AAAVRCAAEAAAACHAAB';
ROWID                  DEPTNO DNAME          LOC
------------------ ---------- -------------- -------------
AAAVRCAAEAAAACHAAB         20 RESEARCH       DALLAS

SCOTT@book> @ &r/dpc '' ''
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID  cut97mhj7hyy3, child number 1
-------------------------------------
select rowid,dept.* from dept where rowid='AAAVRCAAEAAAACHAAB'
Plan hash value: 3453257278
--------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                  | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time   | A-Rows |   A-Time   | Buffers | Reads  |
--------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT           |      |      1 |        |       |     1 (100)|          |      1 |00:00:00.01 |       1 |      8 |
|   1 |  TABLE ACCESS BY USER ROWID| DEPT |      1 |      1 |    20 |     1   (0)| 00:00:01 |      1 |00:00:00.01 |       1 |      8 |
--------------------------------------------------------------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
   1 - SEL$1 / DEPT@SEL$1

--//buffers=1,而reads=8? 有一点奇怪吧.oracle为什么这样操作呢?不是很清楚....

SYS@book> @ &r/bh 4 134
HLADDR           DBARFIL      DBABLK CLASS CLASS_TYPE         STATE             TCH CR_SCN_BAS CR_SCN_WRP CR_UBA_FIL CR_UBA_BLK CR_UBA_SEQ BA               OBJECT_NAME
---------------- ------- ----------- ----- ------------------ ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------------- ------------
0000000084B66B38       4         134    14 unused             xcur                0          0          0          0          0          0 0000000071B7E000 DEPT
0000000084B66B38       4         134     0                    free                0          0          0          0          0          0 0000000072024000 DEPT
0000000084B66B38       4         134     1 data block         free                0          0          0          0          0          0 0000000072638000 DEPT

--//这里也说明dba=4,134,state=xcur,说明执行时读取了块dba=4,134的块地址.再次执行:

SCOTT@book> select rowid,dept.* from dept where rowid='AAAVRCAAEAAAACHAAB';
ROWID                  DEPTNO DNAME          LOC
------------------ ---------- -------------- -------------
AAAVRCAAEAAAACHAAB         20 RESEARCH       DALLAS

--//执行计划:
Plan hash value: 3453257278
-----------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                  | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time   | A-Rows |   A-Time   | Buffers |
-----------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT           |      |      1 |        |       |     1 (100)|          |      1 |00:00:00.01 |       1 |
|   1 |  TABLE ACCESS BY USER ROWID| DEPT |      1 |      1 |    20 |     1   (0)| 00:00:01 |      1 |00:00:00.01 |       1 |
-----------------------------------------------------------------------------------------------------------------------------
--//buffers=1.上下对比也说明问题,这也是我前面看到文件系统为什么缓存64K的原因.至于为什么这样,我就不清除了.^_^ .

时间: 2024-07-30 10:53:47

[20170224]nocache工具的小测试2.txt的相关文章

[20170221]nocache工具的小测试.txt

[20170221]nocache工具的小测试.txt --nocache 这个小工具可以显示文件在缓存的数量. --其中 cachestats 有一个-v  参数可以以表格形式显示.看看它的标识是否正确. 1.环境: SYS@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- -------------------

Linux命令行工具使用小贴士及技巧(一)

相关内容 如果你刚开始在 Linux 系统中使用命令行工具,那么你应该知道它是 Linux 操作系统中功能最强大和有用的工具之一.学习的难易程度跟你想研究的深度有关.但是,无论你的技术能力水平怎么样,这篇文章中的一些小贴士和技巧都会对你有所帮助. 在本系列的文章中,我们将会讨论一些非常有用的命令行工具使用小技巧,希望你的命令行使用体验更加愉快. 但是在开始下一步之前,我得强调一点,这篇文章中的测试实例都是在 Ubuntu 14.04LTS 系统下测试通过的.我们使用命令行 Shell 版本是 b

事件绑定之小测试 onclick && addEventListener_javascript技巧

开发工具中应该有相应的功能,于是测试之: 前提:只是一个简单的小测试,而且 addEventListener 属于标准绑定函数,IE 中与此不兼容(IE 相应的是 attachEvent),所以此次测试先抛弃 IE,使用 Firefox 5.0.1, Chrome 14.0, Opera 11.50 测试页面: 复制代码 代码如下: <!DOCTYPE html> <html> <head> <title>Test</title> <sty

Linux 命令行工具使用小贴士及技巧(一)

相关内容 如果你刚开始在 Linux 系统中使用命令行工具,那么你应该知道它是 Linux 操作系统中功能最强大和有用的工具之一.学习的难易程度跟你想研究的深度有关.但是,无论你的技术能力水平怎么样,这篇文章中的一些小贴士和技巧都会对你有所帮助. 在本系列的文章中,我们将会讨论一些非常有用的命令行工具使用小技巧,希望你的命令行使用体验更加愉快. 但是在开始下一步之前,我得强调一点,这篇文章中的测试实例都是在 Ubuntu 14.04LTS 系统下测试通过的.我们使用命令行 Shell 版本是 b

程序员小测试:保守派 vs 自由派

最近,我在阅读 Steve Yegg 的文集<程序员的呐喊>. 这是一本非常有趣的书,里面甚至包含了一个小测试(原文),区分一个程序员到底是保守派还是自由派. 下面一共有十个问题,每个问题都有 A 和 B 两个选项,请选择你的答案. 问题一:Bug 还没修复,软件能不能上线? (A)软件发布前,应该编写完整测试,充分调试,尽量修复所有bug. (B)不管多努力,bug 总是无法避免的,如果性质不是很严重,可以先上线,根据反馈再调试和修补. 问题二:容易出错的特性,是否应该用在程序中? (A)很

代码-JS小测试出问题,求大神解答!

问题描述 JS小测试出问题,求大神解答! <!doctype html> <html> <head> <meta charset="utf-8"> <title>无题</title> <script type="text/javascript"> window.onload=function(){ var x=document.getElementsByName("test

云计算知识小测试:看你有多了解云?

 本文讲的是云计算知识小测试:看你有多了解云?,[IT168 专稿]云计算可以带来更少的花费.更低的复杂度和更少的能源消耗,目前已经吸引了无数首席信息官和高科技企业者的兴趣.虽然目前已经有很多大牌企业已经开始提供云相关的产品和服务,但是更多的人对于云计算这个概念并不是那么清晰.对此,华尔街时报提供了一个10个问题的小测试,来看看你是否对云计算的概念感到"云山雾罩".     1.云计算到底是什么?     A:组织桌面电脑的一种方式      B:占用很少硬盘空间的一个小软件     

《CCENT/CCNA ICND1(100-101)认证考试指南(第4版)》——1.1节“我已经知道了吗?”小测试

1.1 "我已经知道了吗?"小测试CCENT/CCNA ICND1(100-101)认证考试指南(第4版)通过本节的小测试可以判断读者是否有必要略读本章或其中某个主要部分内容,甚至可以直接阅读本章的"考前准备".这些测试题可用来评估读者对该部分知识的掌握程度.本节小测试的答案参见随附光盘的附录C. 1.下列哪些协议属于TCP/IP传输层协议?(选择两个答案) a.以太网 b.HTTP c.IP d.UDP e.SMTP f.TCP 2.下列哪些协议属于数据链路层协议

[20160516]SQL共享光标的测试疑问.txt

[20160516]SQL共享光标的测试疑问.txt --昨天我看了链接http://blog.itpub.net/17203031/viewspace-754994/,感觉他的测试有问题,不可能相同的sql语句,而sql_id会不一样 --的.我自己测试看看. 1.环境: SYS@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ------------------------------ ------