oracle10g调整log_buffer大小的问题!

[复制链接]
查看11 | 回复9 | 2008-1-2 17:35:53 | 显示全部楼层 |阅读模式
最近公司数据库升级后发现log_buffer有7M左右好像有些大,于是想将其调小到2M。但是修改后重启数据库发现log_buffer没变,开始以为有最小值限制之类的,后在网上搜索了下资料,其中一篇http://lfree.itpub.net/post/4950/242098谈到这个问题说是跟粒度有关系。
看了这篇文章还是不知道这个粒度是如何得来的?
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
我的space下的一篇文章,你可以参考一下,看是不是这样的:
http://space.itpub.net/67294/viewspace-405402
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
32位 windows平台? 8M的granule?
从Oracle 10g开始,log_buffer+ SGA Fixed Size>=1个granule.
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
10g?
10g如果用sga_target,好像log buffer就很大,不过无所谓
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
我在测试数据库又做了下测试:
[php]
SQL> startup
ORACLE 例程已经启动。
Total System Global Area369098752 bytes
Fixed Size
1249056 bytes
Variable Size
146800864 bytes
Database Buffers
218103808 bytes
Redo Buffers
2945024 bytes
数据库装载完毕。
数据库已经打开。
SQL> show parameter sga
NAME
TYPEVALUE
------------------------------------ ----------- ------------------------------
lock_sga
boolean FALSE
pre_page_sga
boolean FALSE
sga_max_size
big integer 352M
sga_target
big integer 352M
SQL> alter system set log_buffer=1048576 scope=spfile;//将log_buffer减小到1M
系统已更改。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area369098752 bytes
Fixed Size
1249056 bytes
Variable Size
146800864 bytes
Database Buffers
218103808 bytes
Redo Buffers
2945024 bytes//log_buffer没有变
数据库装载完毕。
数据库已经打开。
SQL> show parameter sga
NAME
TYPEVALUE
------------------------------------ ----------- ------------------------------
lock_sga
boolean FALSE
pre_page_sga
boolean FALSE
sga_max_size
big integer 352M
sga_target
big integer 352M
SQL> alter system set log_buffer=3145728 scope=spfile;//将log_buffer增大到3M
系统已更改。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area373293056 bytes
Fixed Size
1249056 bytes
Variable Size
146800864 bytes
Database Buffers
218103808 bytes
Redo Buffers
7139328 bytes//log_buffer变到6.8M了
数据库装载完毕。
数据库已经打开。
SQL> show parameter sga
NAME
TYPEVALUE
------------------------------------ ----------- ------------------------------
lock_sga
boolean FALSE
pre_page_sga
boolean FALSE
sga_max_size
big integer 356M
sga_target
big integer 352M
[/php]
完全搞不懂这个log_buffer是怎么得来的,希望哪位高手能详细解释下。
[ 本帖最后由 SingleLove 于 2008-7-28 16:32 编辑 ]
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
原帖由 Toms_zhang 于 2008-7-28 16:01 发表
32位 windows平台? 8M的granule?
从Oracle 10g开始,log_buffer+ SGA Fixed Size>=1个granule.

大哥我加你MSN了,你上下MSN家我咯。有点事要请教你!!
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
记得使用sga_target时,oracle会把剩余内存都归到log_buffer中,所以很大,不过无所谓,这东西oracle自己管理~
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
原帖由 zergduan 于 2008-7-28 16:24 发表
记得使用sga_target时,oracle会把剩余内存都归到log_buffer中,所以很大,不过无所谓,这东西oracle自己管理~

但是log_buffer大了在数据库挂掉的时候不是容易丢数据么?
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
原帖由 SingleLove 于 2008-7-28 16:29 发表

但是log_buffer大了在数据库挂掉的时候不是容易丢数据么?

这个不可能吧,log_buffer多大都不会丢数据的!
因为只有lgwr把log_buffer中的信息写入redo后,你才能得到Commit complete的提示,才能继续下面的操作。
current redo丢了才会丢数据的~
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
原帖由 SingleLove 于 2008-7-28 16:29 发表

但是log_buffer大了在数据库挂掉的时候不是容易丢数据么?

满1MB就写。所以没有你这种说法“但是log_buffer大了在数据库挂掉的时候不是容易丢数据么?”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行