首页 > 其他分享 >[20241107]nocache的编译.txt

[20241107]nocache的编译.txt

时间:2024-11-08 20:19:06浏览次数:3  
标签:nocache -- 20241107 dbf oradata master txt book01p

[20241107]nocache的编译.txt

--//原来的测试环境不存在,需要建立nocache工具了解文件缓存情况,学习OS相关知识。
--//实际上linux对这些工具从应用角度讲不重要,如果有用,linux实用程序里面应该包含类似工具。可惜一直不提供。
--//一般这类安装,我都会写安装笔记,我看了以前的安装笔记,重复操作并记录操作细节。

1.首先简单介绍nocache:

nocache - minimize filesystem caching effects
---------------------------------------------

The `nocache` tool tries to minimize the effect an application has on
the Linux file system cache. This is done by intercepting the `open`
and `close` system calls and calling `posix_fadvise` with the
`POSIX_FADV_DONTNEED` parameter. Because the library remembers which
pages (ie., 4K-blocks of the file) were already in file system cache
when the file was opened, these will not be marked as "don't need",
because other applications might need that, although they are not
actively used (think: hot standby).

Use case: backup processes that should not interfere with the present
state of the cache.

2.下载链接:
https://github.com/Feh/nocache
https://codeload.github.com/Feh/nocache/zip/master
--//注:我不知道现在这个链接是否还有效,是否已经更新。

3.解压:
# unzip nocache-master.zip -d /tmp/
Archive:  nocache-master.zip
ce5c18701b1499195d0de7380037efee27a17722
   creating: /tmp/nocache-master/
  inflating: /tmp/nocache-master/COPYING
  inflating: /tmp/nocache-master/Makefile
  inflating: /tmp/nocache-master/README
    linking: /tmp/nocache-master/README.md  -> README
  inflating: /tmp/nocache-master/cachedel.c
  inflating: /tmp/nocache-master/cachestats.c
  inflating: /tmp/nocache-master/fcntl_helpers.c
  inflating: /tmp/nocache-master/fcntl_helpers.h
   creating: /tmp/nocache-master/man/
  inflating: /tmp/nocache-master/man/cachedel.1
  inflating: /tmp/nocache-master/man/cachestats.1
  inflating: /tmp/nocache-master/man/nocache.1
  inflating: /tmp/nocache-master/nocache.c
  inflating: /tmp/nocache-master/nocache.in
  inflating: /tmp/nocache-master/pageinfo.c
  inflating: /tmp/nocache-master/pageinfo.h
   creating: /tmp/nocache-master/t/
  inflating: /tmp/nocache-master/t/basic.t
  inflating: /tmp/nocache-master/t/ls.t
  inflating: /tmp/nocache-master/t/maxfd.t
  inflating: /tmp/nocache-master/t/testlib.sh
finishing deferred symbolic links:
  /tmp/nocache-master/README.md -> README
--//这样解压到/tmp/nocache-master目录.

4.修改源代码:
--//原始的版本编译后cachestats无法显示文件名,我自己做了修改。也许仅仅一个一个查询的原因。

# cd /tmp/nocache-master/
--//cachestats.c
 59     if(st.st_size == 0) {
 60         printf("%-40s ",argv[1]);
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 61         printf("pages in cache: %d/%d (%.1f%%)  [filesize=%.1fK, "
 62                 "pagesize=%dK]\n", 0, 0, 0.0,
 63                 0.0, PAGESIZE / 1024);
 64         return EXIT_SUCCESS;
 65     }
 66
 67     pages = (st.st_size + PAGESIZE - 1) / PAGESIZE;
 68     pageinfo = calloc(sizeof(*pageinfo), pages);
 69     if(!pageinfo)
 70         exiterr("calloc");
 71
 72     file = mmap(NULL, st.st_size, PROT_NONE, MAP_SHARED, fd, 0);
 73     if(file == MAP_FAILED)
 74         exiterr("mmap");
 75     if(mincore(file, st.st_size, pageinfo) == -1)
 76         exiterr("mincore");
 77
 78     i = j = 0;
 79     while(i < pages)
 80         if(pageinfo[i++] & 1)
 81             j++;
 82
 83     if(quiet) {
 84         if(j == i)
 85             return EXIT_SUCCESS;
 86         return EXIT_FAILURE;
 87     }
 88
 89     printf("%-40s ",argv[1]);
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 90     printf("pages in cache: %d/%d (%.1f%%)  [filesize=%.1fK, "
 91         "pagesize=%dK]\n", j, i, 100.0 * j / i,
 92         1.0 * st.st_size / 1024, PAGESIZE / 1024);
--//注:下划线那行是我增加的.(注:前面是行号)

5.编译与安装:
# make
cc -Wall   -o cachedel cachedel.c
cc -Wall   -o cachestats cachestats.c
cc -Wall   -fPIC -c -o nocache.o nocache.c
cc -Wall   -fPIC -c -o fcntl_helpers.o fcntl_helpers.c
cc -Wall   -fPIC -c -o pageinfo.o pageinfo.c
cc -Wall   -pthread -shared -Wl,-soname,nocache.so -o nocache.so nocache.o fcntl_helpers.o pageinfo.o -ldl
sed 's!##libdir##!$(dirname "$0")!' <nocache.in >nocache
chmod a+x nocache

# make install
sed 's!##libdir##!/usr/local/lib!' <nocache.in >nocache.global
install -pm 0644 nocache.so /usr/local/lib
install -pm 0755 nocache.global /usr/local/bin/nocache
install -pm 0755 cachedel cachestats /usr/local/bin
install -pm 0644 man/nocache.1 man/cachestats.1 man/cachedel.1 /usr/local/share/man/man1

6.简单测试:
SCOTT@book01p> select rowid,dept.* from dept;
ROWID                  DEPTNO DNAME                          LOC
------------------ ---------- ------------------------------ -------------
AAASmfAAMAAAACDAAA         10 ACCOUNTING                     NEW YORK
AAASmfAAMAAAACDAAB         20 RESEARCH                       DALLAS
AAASmfAAMAAAACDAAC         30 SALES                          CHICAGO
AAASmfAAMAAAACDAAD         40 OPERATIONS                     BOSTON

SCOTT@book01p> @ rowid AAASmfAAMAAAACDAAA

DATA_OBJECT_ID       FILE      BLOCK        ROW ROWID_DBA            DBA                  TEXT
-------------- ---------- ---------- ---------- -------------------- -------------------- --------------------------------------------------
         76191         12        131          0  0x3000083           12,131               alter system dump datafile 12 block 131 ;
--//rowid=AAASmfAAMAAAACDAAA,在dba=12,131。

SCOTT@book01p> select * from dept where rowid='AAASmfAAMAAAACDAAA';
    DEPTNO DNAME                          LOC
---------- ------------------------------ -------------
        10 ACCOUNTING                     NEW YORK

SYS@book> alter system flush BUFFER_CACHE;
System altered.

SYS@book> alter system flush BUFFER_CACHE;
System altered.

SYS@book01p> alter system flush BUFFER_CACHE;
System altered.
SYS@book01p> alter system flush BUFFER_CACHE;
System altered.

$ cachestats -v /u01/oradata/BOOK/book01p/users01.dbf  | head -6
/u01/oradata/BOOK/book01p/users01.dbf    pages in cache: 112/128962 (0.1%)  [filesize=515848.0K, pagesize=4K]

cache map:
     0: |x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|
    32: |x|x|x|x|x|x|x|x| | | | | | | | | | | | | | | | | | | | | | | | |
    64: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
--//无论我如何刷新都缓存这些数据块,pagesize=4K。相当于缓存了40*4=160K。在pdb下执行也一样。
--//注:11g下不是这样的情况。

$ cachedel  /u01/oradata/BOOK/book01p/users01.dbf
$ cachestats -v /u01/oradata/BOOK/book01p/users01.dbf | grep x

 $ cachestats -v /u01/oradata/BOOK/book01p/users01.dbf  | head -14
/u01/oradata/BOOK/book01p/users01.dbf    pages in cache: 0/128962 (0.0%)  [filesize=515848.0K, pagesize=4K]

cache map:
     0: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
    32: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
    64: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
    96: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
   128: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
   160: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
   192: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
   224: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
   256: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
   288: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
   320: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |

SCOTT@book01p> select * from dept where rowid='AAASmfAAMAAAACDAAA';

    DEPTNO DNAME                          LOC
---------- ------------------------------ -------------
        10 ACCOUNTING                     NEW YORK

$ cachestats -v /u01/oradata/BOOK/book01p/users01.dbf  | head -14
/u01/oradata/BOOK/book01p/users01.dbf    pages in cache: 2/128962 (0.0%)  [filesize=515848.0K, pagesize=4K]

cache map:
     0: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
    32: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
    64: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
    96: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
   128: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
   160: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
   192: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
   224: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
   256: | | | | | | |x|x| | | | | | | | | | | | | | | | | | | | | | | | |
   288: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
   320: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
--//     0 1 2 3 4 5 6 7
--//在6,7的位置。256+6 256+7= 262,263.
--//pagesize=4K ,而数据块8K,这样dba=12,131对应4K就是262,263.

--//cachestats命令有一个小缺陷,不支持文件扩展名查询。
$ cachestats  /u01/oradata/BOOK/book01p/sys*.dbf
/u01/oradata/BOOK/book01p/sysaux01.dbf   pages in cache: 8634/133122 (6.5%)  [filesize=532488.0K, pagesize=4K]
--//仅仅查询1条文件,通过xargs+find(ls)结合在一起就ok了.

$ ls -1 /u01/oradata/BOOK/book01p/sys*.dbf  | xargs -IQ  cachestats  Q
/u01/oradata/BOOK/book01p/sysaux01.dbf   pages in cache: 8634/133122 (6.5%)  [filesize=532488.0K, pagesize=4K]
/u01/oradata/BOOK/book01p/system01.dbf   pages in cache: 48376/74242 (65.2%)  [filesize=296968.0K, pagesize=4K]

$ ls -1 /u01/oradata/BOOK/book01p/sys*.dbf  | xargs -IQ bash -c "cachestats -v Q|head -6"
/u01/oradata/BOOK/book01p/sysaux01.dbf   pages in cache: 8634/133122 (6.5%)  [filesize=532488.0K, pagesize=4K]

cache map:
     0: |x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|
    32: |x|x|x|x|x|x|x|x| | | | | | | | | | | | | | | | | | | | | | | | |
    64: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
/u01/oradata/BOOK/book01p/system01.dbf   pages in cache: 48376/74242 (65.2%)  [filesize=296968.0K, pagesize=4K]

cache map:
     0: |x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|x|
    32: |x|x|x|x|x|x|x|x| | | | | | | | | | | | | | | | | | | | | | | | |
    64: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
--//确实启动后前面40块(4K),OS已经缓存,alter system flush BUFFER_CACHE;无法清除。

7.再来谈谈filesystemio_options参数:
SYS@book> @ pvalid  filesystemio_options
Display valid values for multioption parameters matching "filesystemio_options"...
  PAR# PARAMETER            ORD VALUE                          DEFAULT
------ -------------------- --- ------------------------------ -------
   431 filesystemio_options   1 ASYNCH
       filesystemio_options   2 DIRECTIO
       filesystemio_options   3 SETALL
       filesystemio_options   4 NONE

--//FILESYTEMIO_OPTIONS can be set to one of the following values:

--//ASYNCH: enable asynchronous I/O on file system files, which has no timing requirement for transmission.
--//        在文件系统文件上启用异步I/O,在数据传送上没有计时要求。
--//DIRECTIO: enable direct I/O on file system files, which bypasses the buffer cache.
--//        在文件系统文件上启用直接I/O,绕过buffer cache。
--//SETALL: enable both asynchronous and direct I/O on file system files.
--//        在文件系统文件上启用异步和直接I/O。
--//NONE: disable both asynchronous and direct I/O on file system files.
--//      在文件系统文件上禁用异步和直接I/O。

--//测试filesystemio_options=DIRECTIO的情况:
SYS@book> alter system set filesystemio_options=DIRECTIO scope=spfile;
System altered.

--//需要重启数据库才生效。
--//测试:
$ cachedel  /u01/oradata/BOOK/book01p/users01.dbf
$ cachestats -v /u01/oradata/BOOK/book01p/users01.dbf | grep x

SCOTT@book01p> select * from dept where rowid='AAASmfAAMAAAACDAAA';

    DEPTNO DNAME                          LOC
---------- ------------------------------ -------------
        10 ACCOUNTING                     NEW YORK

$ cachestats -v /u01/oradata/BOOK/book01p/users01.dbf | grep x
$ cachestats  /u01/oradata/BOOK/book01p/users01.dbf
/u01/oradata/BOOK/book01p/users01.dbf    pages in cache: 0/128962 (0.0%)  [filesize=515848.0K, pagesize=4K]

$ ls -1 /u01/oradata/BOOK/book01p/*.dbf  | xargs -IQ  cachestats  Q
*/
/u01/oradata/BOOK/book01p/sysaux01.dbf   pages in cache: 0/133122 (0.0%)  [filesize=532488.0K, pagesize=4K]
/u01/oradata/BOOK/book01p/system01.dbf   pages in cache: 0/74242 (0.0%)  [filesize=296968.0K, pagesize=4K]
/u01/oradata/BOOK/book01p/temp01.dbf     pages in cache: 0/78338 (0.0%)  [filesize=313352.0K, pagesize=4K]
/u01/oradata/BOOK/book01p/undotbs01.dbf  pages in cache: 0/62722 (0.0%)  [filesize=250888.0K, pagesize=4K]
/u01/oradata/BOOK/book01p/users01.dbf    pages in cache: 0/128962 (0.0%)  [filesize=515848.0K, pagesize=4K]
--//实际上没有1个数据文件在OS的缓存。

--//你可以发现pages in cache: 0/128962 (0.0%),也就是操作系统没有缓存对应的文件数据块在操作系统内存中。仅仅在数据库的数
--//据缓存有数据块。
SYS@book01p> @ bh  12 131
   INST_ID HLADDR              DBARFIL     DBABLK      CLASS CLASS_TYPE         STATE             TCH CR_SCN_BAS CR_SCN_WRP CR_UBA_FIL CR_UBA_BLK CR_UBA_SEQ BA               LE_ADDR          OBJECT_NAME
---------- ---------------- ---------- ---------- ---------- ------------------ ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------------- ---------------- --------------------
         1 00000000786E2D88         12        131          1 data block         xcur                1          0          0          0          0          0 0000000088120000 00               DEPT

--//我以前遇到一位前辈上线很喜欢这样设置filesystemio_options=setall,与DIRECTIO类似,差别仅仅是否启用异步IO。
--//如果磁盘IO能力强劲,这样设置没有什么问题。因为OS不缓存,这样设置可以适当加大sga的数据缓存的设计。

--//另外的情况如果设置ASYNCH或none,操作系统缓存发挥很大作用,会很大程序掩盖不良sql语句的大量磁盘读写的情况。
--//很多情况下的读写先经过OS的数据缓存,并非直接来之磁盘IO。

--//一旦os缓存放不下,问题马上暴露,多块读以及单块读的时间显著上升。一些项目上线开始单块读 经常是1,2ms。
--//到一定从程度上升到5,6ms甚至更高,就是这个原因。

--//实际上采用asm非常类似filesystemio_options=setall的情况,操作系统不会缓存对应的数据块,如果磁盘IO能力不强,效果比采用
--//filesystem的数据文件还要慢。特别一些上rac的系统,如果购买的存储性能不好,多块读以及单块读的时间很大。

8.另外还有一个vmtouch工具,功能更加强大一些,我很少用。
--//参考 [20191125]编译vmtouch.txt

--//从介绍可以看出vmtouch是一个管理和控制Unix和类Unix文件系统缓存的工具。
--//vmtouch的主要功能如下:

--//查看一个文件(或者目录)哪些部分在内存中;
--//把文件调入内存;
--//把文件清除出内存;
--//把文件锁住在内存中而不被换出到磁盘上;

标签:nocache,--,20241107,dbf,oradata,master,txt,book01p
From: https://www.cnblogs.com/lfree/p/18535876

相关文章

  • 解析lightgbm的txt模型文件
    根据近期的github方案,实现对txt格式的pmml文件的加载添加依赖<dependency><groupId>org.jpmml</groupId><artifactId>pmml-lightgbm</artifactId><version>1.5.4</version></dependency><dependency><groupId>......
  • 20241107数据封装
    20241107数据封装数据包利用网络在不同设备之间传输时,为了可靠和准确地发送到目的地,并且高效地利用传输资源(传输设备和传输线路),事先要对数据包进行拆分和打包,在所发送的数据包上附加上目标地址,本地地址,以及一些用于纠错的字节,安全性和可靠性较高时,还要进行加密处理等等。这些操......
  • 网站robots文件怎么优化?robots.txt文件的作用及生成
    Robots.txt文件是网站根目录下的一个纯文本文件,用于指导搜索引擎蜘蛛如何抓取和访问网站内容,通过设置不同的规则,可以有效地控制哪些页面可以被抓取,哪些不可以被抓取,从而优化网站SEO效果和保护敏感信息。什么是robots.txt?定义:robots.txt是一个存放在网站根目录下的纯文本文件,用来......
  • 提供一个基本的cmakelists.txt文件
     project(ftptest)message("----------cmake${PROJECT_NAME}----------start")#设置构建类型为Release#set(CMAKE_BUILD_TYPERelease)set(CMAKE_VERBOSE_MAKEFILEON)#set(CMAKE_CXX_FLAGS"$ENV{CXXFLAGS}-rdynamic-O0-ggdb-std=c++11-Wall-Wno-......
  • [20241105]跟踪library cache lock library cache pin使用gdb(11g)2.txt
    [20241105]跟踪librarycachelocklibrarycachepin使用gdb(11g)2.txt--//前一段时间写的使用gdb跟踪librarycachelock/librarycachepin的脚本。--//我看过以前的笔记,当时测试过链接https://nenadnoveljic.com/blog/library-cache-lock-debugger/,我的测试在11g是失败.--//......
  • 20241107,LeetCode 每日一题,使用 Go 计算两数相加
    思路模拟加法:链表存储的是逆序数位,因此从头节点开始,逐位相加可以模拟正常的加法。每两个节点的值相加,并记录进位。逐节点相加:创建一个新的链表,用于存储结果,每次将两个链表对应节点的值加上进位值,结果存储到新链表的节点中。计算过程中,将(l1.Val+l2.Val+carry)相加的......
  • 20241107,LeetCode 每日一题,使用 Go 计算两数相加
    思路模拟加法:链表存储的是逆序数位,因此从头节点开始,逐位相加可以模拟正常的加法。每两个节点的值相加,并记录进位。逐节点相加:创建一个新的链表,用于存储结果,每次将两个链表对应节点的值加上进位值,结果存储到新链表的节点中。计算过程中,将(l1.Val+l2.Val+carry)相加的结......
  • 为什么要生成python项目需要的最小requirements.txt文件?
    在开发Python项目时,你是否曾面临过依赖管理的困扰?随着项目的复杂性增加,如何有效地管理和共享依赖成为了一项关键任务。今天,我们就来探讨为什么生成Python项目需要的最小requirements.txt文件至关重要。那么,为什么每个Python项目都需要一个requirements.txt文件?它对项目的开发......
  • txt数据转为pdf格式并使用base64解密输出
    使用该方法请注意:因为此方法使用了base64解密,需要保证txt中的数据首先用了base64加密,如果只是普通的二进制数据,该方法并不适用 第一步<dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.24</versi......
  • 海康威视AI开放平台训练数据集导入问题---解决导入自己数据集的问题(txt转json格式)
    一、问题导入首先我们先进入到开放平台中,选择物体检测最近在做一个项目,需要使用到海康威视AI开放平台来训练数据集,但是刚开始遇到了一个问题就是导入自己的数据集(txt格式转成了json格式)为啥没有用,后面查看相关文档,解决了导入自己数据集的问题,就不用在平台里标注了。二、探......