怎么做独立显卡共享内存设置数据库

如何做共享内存数据库-CSDN论坛
其他数据库
如何做共享内存数据库
我们小组参加比赛,时间比较紧,六月底提交,但基础比较薄,希望大家能给点提议
联创出的题目吧!
LZ什么学校的?
是联创出的。我是中南大学的。紧张准备中。
要做一个内存数据库,首先要分清他与传统的基于硬盘的数据库的区别。
其中有几个非常重要的部分。
1.解释器&用于实现sql语句
2.buffer模块,用于把数据放入内存
3.与应用程序的api接口
这是我的邮箱:
我们也选了这个题目,qq:
有好多疑问啊&
3楼说得对,是挺难的,得花很多心血。不过我们收获很多,很有信心和兴趣做下去的
多谢&anygoanygogo&
我们现在在做解释器了
我们先前准备是研究SQLite&的源码,结果发现特别复杂,看不懂。&&&干脆就自己做了!不过进展还好,加油!
现在都这么牛了,&本科生就要求开发一个dbms。&有前途@!!!!
andkylee&&你好
&&&此dbms&不比其它dbms,顶多能做出个很简陋&&粗糙的。
&&&锻炼锻炼吧,大学这样的机会太少了
引用&9&楼&weihongcsu&的回复:andkylee&&你好
&&&此dbms&不比其它dbms,顶多能做出个很简陋&&粗糙的。
&&&锻炼锻炼吧,大学这样的机会太少了
个人感觉:能把数据库原理搞懂,不一定能够搞出个什么所谓的dbms的毕业生已经很牛,公司就愿意要这样的学生。 
引用&7&楼&weihongcsu&的回复:多谢&anygoanygogo&
我们现在在做解释器了
我们先前准备是研究SQLite&的源码,结果发现特别复杂,看不懂。&&&干脆就自己做了!不过进展还好,加油!
我看好你哟~加油!
引用&9&楼&weihongcsu&的回复:andkylee&&你好
&&&此dbms&不比其它dbms,顶多能做出个很简陋&&粗糙的。
&&&锻炼锻炼吧,大学这样的机会太少了
多谢指教,我们必定更加努力!
我们现在是一边写,一边参考SQLite的源码,虽然比较忙(软件学院都这样,还有一年就实习了),但全力以赴吧!
引用&10&楼&andkylee&的回复:引用&9&楼&weihongcsu&的回复:
andkylee&&你好
此dbms&不比其它dbms,顶多能做出个很简陋&&粗糙的。
锻炼锻炼吧,大学这样的机会太少了
个人感觉:能把数据库原理搞懂,不一定能够搞出个什么所谓的dbms的毕业生已经很牛,公司就愿意要这样的学生。
非常感谢,有大伙的支持,更精神百倍!
刚把帖给结了,谢谢大家的指导,我们会把这个内存数据库坚持做下去的!
回复&>&共享内存数据库\Linux下基于共享内存访问的数据库设计与实现
共享内存数据库\Linux下基于共享内存访问的数据库设计与实现
上传大小:1.36MB
一篇关于共享内存数据库\Linux下基于共享内存访问的数据库设计与实现的论文 写的不错 拿出来与大家分享
综合评分:4
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有7条
写的不错,可以当做参考
比较好用啊
写的很详细的一文章,不过有点浅显。
VIP会员动态
热门资源标签
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
共享内存数据库\Linux下基于共享内存访问的数据库设计与实现
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
无法举报自己的资源
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
请选择类型
资源无法下载 ( 404页面、下载失败、资源本身问题)
资源无法使用 (文件损坏、内容缺失、题文不符)
侵犯版权资源 (侵犯公司或个人版权)
虚假资源 (恶意欺诈、刷分资源)
含色情、危害国家安全内容
含广告、木马病毒资源
*投诉人姓名:
*投诉人联系方式:
*版权证明:
*详细原因:
共享内存数据库\Linux下基于共享内存访问的数据库设计与实现豆丁微信公众号
君,已阅读到文档的结尾了呢~~
LINUX下基于共享内存访问的数据库设计与实现
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
LINUX下基于共享内存访问的数据库设计与实现
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口Oracle Database 10g:自动共享内存管理-数据库专栏,ORACLE
是不是很难准确地分配不同的池所需的内存数?自动共享内存管理特性使得自动将内存分配到最需要的地方去成为可能。
无论您是一个刚入门的 dba 还是一个经验丰富的 dba,您肯定至少看到过一次类似以下的错误: ora-04031:unable to allocate 2216 bytes of shared memory (“shared pool”… …
或者这种错误: ora-04031:unable to allocate xxxx bytes of shared memory (“large pool”,”unknown object”,”session heap”,”frame”)
或者可能这种错误: ora-04031:unable to allocate bytes of shared memory (“shared pool”,”unknown object”,”joxlod:init h”, “jox:ioc_allocate_pal”)
第一种错误的原因很明显:分配给共享池的内存不足以满足用户请求。(在某些情况下,原因可能不是池本身的大小,而是未使用绑定变量导致的过多分析造成的碎片,这是我很喜欢的一个主题;但目前让我们把重点放在手头的问题上。)其它的错误分别来自大型池和 java 池的空间不足。
您需要解决这些错误情况,而不作任何与应用程序相关的修改。那么有哪些方案可选呢?问题是如何在 oracle 例程所需的所有池之间划分可用的内存。
馅饼怎么分?
正如您所了解的,一个 oracle 例程的系统全局区域 (sga) 包含几个内存区域(包括缓冲高速缓存、共享池、java 池、大型池和重做日志缓冲)。这些池在操作系统的内存空间中占据了固定的内存数;它们的大小由 dba 在初始化参数文件中指定。
这四个池(数据库块缓冲高速缓存、共享池、java 池和大型池)几乎占据了 sga 中所有的空间。(与其它区域相比,重做日志缓冲没有占据多少空间,对我们这里的讨论无关紧要。)作为 dba,您必须确保它们各自的内存分配是充足的。
假定您决定了这些池的值分别是 2gb、1gb、1gb 和 1gb。您将设置以下初始化参数来为数据库例程规定池的大小。 db_cache_size = 2gshared_pool_size = 1glarge_pool_size = 1gjava_pool_size = 1g
现在,仔细看一下这些参数。坦白讲,这些值是否准确?
我相信您一定会有疑虑。在实际中,没有人能够为这些池指定确切的内存数 — 它们太依赖于数据库内部的处理,而处理的特性随时在变化。
下面是一个示例场景。假定您有一个典型的、大部分属于 oltp 的数据库,并且为缓冲高速缓存分配的专用内存比为纯 oltp 数据库(现在已经很少见了)分配的要少。有一天,您的用户放开了一些非常大的全表扫描,以创建当天的结束报表。oracle9i 数据库为您提供了在线修改内存分配的功能,但由于提供的总物理内存有限,您决定从大型池和 java 池中取出一些内存: alter system set db_cache_size = 3g scope=alter system set large_pool_size = 512m scope=alter system set java_pool_size = 512m scope=
这个解决方案能够很好地工作一段时间,但是接着夜间的 rman 作业(它们使用大型池)开始了,大型池将立即出现内存不足。同样,您从数据库高速缓存中取出一些内存来补充大型池,以挽救这种局面。
rman 作业完成,然后启动一个广泛使用 java 的批处理程序,接着您开始看到与 java 池相关的错误。因此,您(再次)重新分配池,以满足 java 池和数据库高速缓存上的内存需求: alter system set db_cache_size = 2g scope=alter system set large_pool_size = 512m scope=alter system set java_pool_size = 1.5g scope=
第二天早上,oltp 作业恢复在线,这个循环又完全重复!
解决这种恶性循环的一种替代方法是永久设置每个池的最大需求。不过,这么做的话,您分配的总的 sga 可能超出可用的内存 — 从而在为每个池分配的内存数不足时,将增加交换和分页的风险。人工重新分配的方法(虽然不实际)目前看起来很不错。
另一种替代方法是将值设为可接受的最小值。不过,当需求增长且内存不能完全满足时,性能将受到影响。
注意在所有这些示例中,分配给 sga 的总内存保持不变,而池之间的内存分配根据即时的需求进行修改。如果 rdbms 将自动探测来自用户的需求并相应地重新分布内存分配,那不是很好吗?
oracle 数据库 10g 中的自动共享内存管理特性正好能够实现这一目的。您可以决定 sga 的总大小,然后设置一个名称为 sga_target 的参数,这个参数决定 sga 的总大小。sga 内部的各个池将根据工作负载动态地进行配置。实现自动内存分配仅仅需要 sga_target 参数的一个非零值。
设置自动共享内存管理
让我们看看该特性是如何工作的。首先,确定 sga 的总大小。您可以通过确定现在分配了多少内存来估计这个值。 sql& select sum(value)/ from v$sum(value)/——————&#
此时 sga 的当前总大小近似为 500mb,并且这个值将变为 sga_target 的值。接下来,执行语句: alter system set sga_target = 500m scope=
这种方法不需要为各个池设置不同值;因而,您将需要在参数文件中使它们的值为零或全部删除它们。 shared_pool_size = 0large_pool_size = 0java_pool_size = 0db_cache_size = 0
再循环数据库,使这些值生效。
这个人工过程还可以通过 enterprise manager 10g 实施。从数据库主页中,选择 “administration” 选项卡,然后选择 “memory parameters”。对于人工配置的内存参数,将显示标记为 “enable” 的按钮,以及所有人工配置的池的值。单击 “enable” 按钮,启用自动共享内存管理特性。企业管理器将完成剩下的工作。
在配置了自动内存分配之后,您可以利用以下命令检查它们的大小: sql& select current_size from v$buffer_current_size———&#sql& select pool, sum(bytes)/ mbytes from v$spool mbytes———— ———-java pool 4large pool 4shared pool 148
正如您所看到的,所有的池都从 500mb 的总目标大小中自动进行分配。(参见图 1。)缓冲高速缓存大小是 340mb,java 池是 4mb,大型池是 4mb,共享池是 148mb。它们合起来总的大小为 (340+4+4+148=) 496mb,近似与 500mb 的目标 sga 的大小相同。
图 1:池的初始分配
现在假定提供给 oracle 的主机内存从 500mb 减少为 300mb,这意味着我们必须减少总 sga 的大小。我们可以通过减小目标 sga 大小来反映这种变化。 alter system set sga_target = 300m scope=现在查看各个池,我们可以看到: sql& select current_size from v$buffer_current_size———&#sql& select pool, sum(bytes)/ mbytes from v$spool mbytes———— ———-java pool 4large pool 4shared pool 44占用的总大小是 240+4+4+44 = 296mb,接近于目标的 300mb。注意如图 2 所示,当 sga_target 改变时,如何自动重新分配池。
图 2:在将 sga 大小减少到 300mb 之后重新分配池
这些池的大小是动态的。池将根据工作负载扩展,以容纳需求的增长,或缩小以容纳另一个池的扩展。这种扩展或缩小自动发生,无需 dba 的干预,这与本文开头的示例不同。让我们暂时返回到那个场景,假定在初始分配后,rman 作业启动,指示需要一个更大的大型池,大型池将从 4mb 扩展到 40mb,以容纳需求。这个额外的 36mb 将从数据库缓冲中划出,数据库块缓冲将缩小,如图 3 所示。
图 3:在对大型池的需求增长之后经过重新分配的池
池的大小变化基于系统上的工作负载,因此不需要为最坏的情况调整池的大小 — 它们将根据需求的增长自动调整。此外,sga 的总大小始终在由 sga_target 指定的最大值之内,因此不存在使内存需求的增长比例失调(这将导致分页和交换)的风险。您可以动态地将 sga_target 增加至绝对最大值,这个绝对最大值是通过调整参数 sga_max_size 指定的。
哪些池不受影响?
sga 中的一些池不受动态大小调整的影响,但是必须显式指定这些池。其中值得注意的是非标准块大小的缓冲池,以及 keep 池或 recycle 池的非默认块大小。如果您的数据库有一个块大小为 8k,而您想要配置 2k、4k、16k 和 32k 块大小的池,那么您必须手动设置它们。它们的大小将保持不变;它们将不会根据负载缩小或扩展。当使用多种大小的缓冲池、keep 池和 recycle 池时,您应当考虑这个因素。此外,日志缓冲不受内存调整的影响 — 不管工作负载如何,在参数 log_buffer 中设定的值是不变的。( 在 10g 中,还可以在 sga 中定义一种新的池:流池 (stream pool),它用参数 streams_pool_size 进行设置。该池也不受自动内存调整的影响。)
这就产生了一个有趣的问题。如果您需要一个非默认块大小的池,而且想自动管理其它的池,那么该怎么办?
如果您指定了这些非自动调整的参数中的任意一个(如 db_2k_cache_size),那么它们的总大小将从 sga_target 值中减去,以计算自动调整的参数值,以使 sga 的总大小保持不变。例如,假设值看起来像这样:
sga_target = 500mdb_2k_cache_size = 50m
其余的池参数未设置。50mb 的 2kb 缓冲池为自动调整的池(如默认块大小缓冲池 (db_cache_size)、共享池、java 池和大型池)保留了 450mb。当以一种方法动态地调整不可自动调整的参数(如 2kb 块大小池)——这种方法将影响到可自动调整部分的大小,可自动调整的部分将重新调整。例如,将 db_2k_cache_size 的值从 50mb 提高到 100mb 只为可自动调整的参数剩余 400mb。因此,如图 4 所示,可调整的池(如共享池、大型池、java 池和默认缓冲池)自动缩小,以将它们的总大小从 450mb 减少到 400mb。
图 4:配置非自动缓冲参数的效果
但如果您有足够的可用内存,或者上述风险可能不是那么明显,那应该怎么办?如果这样的话,您可以通过不指定参数文件中的参数 sga_target、通过在文件中将其设为 0,或者通过使用 alter system 动态地将其修改为 0 来关闭自动大小调整。当 sga_target 被设为 0 时,池的当前值被自动设为它们的参数。
使用 enterprise manager
您还可以使用 enterprise manager 10g 来处理这些参数。从数据库主页中单击超链接 “memory parameters”,这将显示一个类似于图 5 中的屏幕。
图 5:在 enterprise manager 中调整自动共享内存管理
注意红圈中的项目:数据库在 automatic shared memory management 模式下运行,总大小为 564mb — 与在参数 sga_target 中指定的值相同。您可以在此修改它,然后单击 apply 按钮接受这些值;可调整的参数将自动调整。
为每个池指定一个最小值
假定您将 sga_target 设为 600mb,并且各个池已自动分配:
池大小 (mb)缓冲池404java 池4大型池4共享池148看看上述值,您可能推断 4mb 的 java 池和大型池可能有点不足;这个值在运行时无疑需要增加。因此,您可能想确保这些池至少在最初时具有更高的值,比如说,分别为 8mb 和 16mb。您可以通过在参数文件中显式地指定这些池的值或动态使用 alter system 来实现这一目的(如下所示)。
alter system set large_pool_size = 16m;alter system set java_pool_size = 8m;
现在查看这些池,您可以看到:
sql& select pool, sum(bytes)/ mbytes from v$spool mbytes———— ———-java pool 8large pool 16shared pool 148sql& select current_size from v$buffer_current_size———&#
池的重新分配显示如下:
池大小 (mb)缓冲池388java 池8大型池16共享池148注意 java 池和大型池是如何分别被重新配置为 8mb 和 16mb,并且注意为了使总的 sga 保持在 600mb 以下,缓冲池已从 404mb 减少为 388mb。当然,这些池仍然由自动共享内存管理控制 — 它们的大小将根据需求缩小或扩展。您显式指定的值为池的大小设定了一个下限;它们将永远不会缩小到低于这个界限。
oracle sga 中的各种池的内存需求不是静态的 — 相反,它们根据系统上的需求而变化。oracle 数据库 10g 中的自动共享内存管理特性通过动态地将资源重新分配到最需要它们的地方同时施加一个指定的最大值以防止分页和交换,使得 dba 能够更有效地管理系统内存。更有效的内存管理还带来了更少的内存需求,这使得更精简的硬件更加可行。
有关自动共享内存管理特性的更多信息,请参见 oracle 数据库性能调整指南的第 7 章。(concerto)
(胡撸胡撸瓢儿)
(是黒不是黑)
第三方登录:

我要回帖

更多关于 显卡共享内存 的文章

 

随机推荐