前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用C语言直接访问SGA

使用C语言直接访问SGA

作者头像
数据和云
发布2018-03-07 17:42:14
1.6K0
发布2018-03-07 17:42:14
举报
文章被收录于专栏:数据和云数据和云数据和云

作者介绍:

姜刚 云和恩墨技术顾问

2017年3月加入云和恩墨,熟悉shell、perl脚本等。

为了加深对ORACLE数据库结构的了解,我们今天从C语言的角度,讲解如何使用C语言直接访问SGA。

基于的事实:

1、数据库启动后会分配共享内存(在ORACLE中称为System Global Area[SGA])

2、数据库中X$开头的表都是内存映射表

3、在Linux/Unix下提供了C的Lib库可以访问共享内存(shmat,shmdt,shmget等)

以GV$SESSION_WAIT为例

查看GV$SEESSION_WAIT的定义

通过上述创建视图信息,我们知道v$session_wait是建在X$KSUSECST和X$KSLED两个内存映射表上的,其访问路径是类似下图:

共享内存结构

获取SGA起始地址语句如下:

select ‘0x’||addr from X$KSMMEM where rownum<2;

X$KSUSECST在内存中的位置

获取X$KSUSECST起始地址:

Select min(addr) as BEGIN_ADDR from X$KSUSECST

获取在内存中的记录数:

Select count(*) as RECORD_SZ from X$KSUSECST

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

获取每个字段的偏移量:

通过上述几个信息收集,我们获得了以下信息:

附录

C语言代码:

参考资料:

http://www.doc88.com/p-113695303367.html http://oraperf.sourceforge.net/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-09-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据和云 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 获取SGA起始地址语句如下:
  • 参考资料:
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档