<< 返回文章列表 基于的事实:
使用C语言直接访问SGA
2017年12月20日
姜刚
1818
1、数据库启动后会分配共享内存(在ORACLE中称为System Global Area[SGA])
2、数据库中X$开头的表都是内存映射表
3、在Linux/Unix下提供了C的Lib库可以访问共享内存(shmat,shmdt,shmget等)以GV$SESSION_WAIT为例
通过上述创建视图信息,我们知道v$session_wait是建在X$KSUSECST和X$KSLED两个内存映射表上的,其访问路径是类似下图: select ‘0x’||addr from X$KSMMEM where rownum<2; 获取X$KSUSECST起始地址: Select min(addr) as BEGIN_ADDR from X$KSUSECST 获取在内存中的记录数: Select count(*) as RECORD_SZ from X$KSUSECST 每个记录数的长度: Select to_dec(e.addr)-to_dec(s.addr) as LENGTH from (select min(addr) as addr from X$KSUSECST where rownum<2) s, (select max(addr) as addr from X$KSUSECST where rownum<3) e 获取每个字段的偏移量: 通过上述几个信息收集,我们获得了以下信息: http://oraperf.sourceforge.net/获取SGA起始地址语句如下:
参考资料:
http://www.doc88.com/p-113695303367.html