在Oracle的官方资料中,对redo log的大小设置也是以切换频率而定的,要求调整到15-20分钟进行一次切换。调整的手段主要是增加日志组数量和调大日志成员文件大小。这样,都可以给dbwr和arc进程更多的时间在后台进行数据写入和归档。
我们知道redo log包括 buffer和log file的部分,这里的innodb_log_file_size是配置log file的大小的。
innodb_log_file_size这个选项是设置 redo 日志(重做日志)的大小。这个值的默认为5M,是远远不够的,在安装完mysql时需要尽快的修改这个值。如果对 Innodb 数据表有大量的写入 *** 作,那么选择合适的 innodb_log_file_size 值对提升MySQL性能很重要。然而设置太大了,就会增加恢复的时间,因此在MySQL崩溃或者突然断电等情况会令MySQL服务器花很长时间来恢复。
由于事务日志相当于一个写缓冲,而小日志文件会很快的被写满,这时候就需要频繁地刷新到硬盘,速度就慢了。如果产生大量的写 *** 作,MySQL可能就不能足够快地刷新数据,那么写性能将会降低。
大的日志文件,另一方面,在刷新 *** 作发生之前给你足够的空间来使用。反过来允许InnoDB填充更多的页面。对于崩溃恢复 – 大的重做日志意味着在服务器启动前更多的数据需要读取,更多的更改需要重做,这就是为什么崩溃恢复慢了。
如果不配的后果:默认是5M,这是肯定不够的。
最后,让我们来谈谈如何找出重做日志的正确大小。
幸运的是,你不需要费力算出正确的大小,这里有一个经验法则:在服务器繁忙期间,检查重做日志的总大小是否够写入1-2小时。你如何知道InnoDB写入多少,使用下面方法可以统计60秒内地增量数据大小:
mysql>show engine innodb status\G select sleep(60)show engine innodb status\G
Log sequence number 4631632062
...
Log sequence number 4803805448
mysql>select (4803805448-4631632062) 60/1024/1024
+--------------------------------------+
| (4803805448-4631632062) 60/1024/1024 |
+--------------------------------------+
|9851.84017181 |
+--------------------------------------+
1 row in set (0.00 sec)
在这个60s的采样情况下,InnoDB每小时写入9.8GB数据。所以如果innodb_log_files_in_group没有更改(默认是2,是InnoDB重复日志的最小数字),然后设置innodb_log_file_size为10G,那么你实际上两个日志文件加起来有20GB,够你写两小时数据了。
更改innodb_log_file_size的难易程度和能设置多大取决于你现在使用的MySQL版本。特别地,如果你使用的是5.6之前的版本,你不能仅仅的更改变量,期望服务器会自动重启。
好了,下面是步骤:
1、在my.cnf更改innodb_log_file_size
2、停止mysql服务器
3、删除旧的日志,通过执行命令rm -f /var/lib/mysql/ib_logfile*
4、启动mysql服务器 – 应该需要比之前长点的时间,因为需要创建新的事务日志。最后,需要注意的是,有些mysql版本(比如5.6.2)限制了重做日志大小为4GB。所以在你设置innodb_log_file_size为2G或者更多时,请先检查一下MySQL的版本这方面的限制。
您好,很高兴为您解答。折腾日志文件,调整了一下大小,将每个日志文件调整为2G,扩展名取为dbf。
约略记录一下步骤。
在用的是不能删除的:
SQL>col member for a30
SQL>select * from v$logfile
GROUP# STATUS TYPEMEMBER IS_
---------- ------- ------- ------------------------------ ---
1 ONLINE /data1/dbstat/redo01.dbf NO
3 STALE ONLINE /data1/dbstat/redo3.logNO
2 ONLINE /data1/dbstat/redo2.logNO
SQL>alter database drop logfile group 2
alter database drop logfile group 2
*
ERROR at line 1:
ORA-01623: log 2 is current log for instance dbstat (thread 1) - cannot drop
ORA-00312: online log 2 thread 1: '/data1/dbstat/redo2.log'
Inactive的删除后,增加新的日志文件:
SQL>alter database drop logfile group 3
Database altered.
SQL>alter database add logfile group 3 ('/data1/dbstat/redo03.dbf') size 2048M reuse
Database altered.
SQL>select * from v$logfile
GROUP# STATUS TYPEMEMBER IS_
---------- ------- ------- ------------------------------ ---
1 ONLINE /data1/dbstat/redo01.dbf NO
3 ONLINE /data1/dbstat/redo03.dbf NO
2 ONLINE /data1/dbstat/redo2.logNO
SQL>set linesize 120
SQL>select * from v$Log
GROUP#THREAD# SEQUENCE# BYTESMEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------------
1 1 0 2147483648 1 YES UNUSED 0
2 1 11 52428800 1 NO CURRENT 203206 2009-09-17 18:56:08
3 1 0 2147483648 1 YES UNUSED 0
切换日志组,当CURRENT变为非活动时(INACTIVE)将其删除:
SQL>alter system switch logfile
System altered.
SQL>alter database drop logfile group 2
alter database drop logfile group 2
*
ERROR at line 1:
ORA-01624: log 2 needed for crash recovery of instance dbstat (thread 1)
ORA-00312: online log 2 thread 1: '/data1/dbstat/redo2.log'
SQL>alter system switch logfile
System altered.
SQL>select * from v$Log
GROUP#THREAD# SEQUENCE# BYTESMEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------------
1 1 12 2147483648 1 NO ACTIVE 203704 2009-09-17 19:04:23
2 1 11 52428800 1 NO ACTIVE 203206 2009-09-17 18:56:08
3 1 13 2147483648 1 NO CURRENT 203710 2009-09-17 19:04:38
SQL>alter system checkpoint
System altered.
SQL>select * from v$Log
GROUP#THREAD# SEQUENCE# BYTESMEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------------
1 1 12 2147483648 1 NO INACTIVE203704 2009-09-17 19:04:23
2 1 11 52428800 1 NO INACTIVE203206 2009-09-17 18:56:08
3 1 13 2147483648 1 NO CURRENT 203710 2009-09-17 19:04:38
SQL>alter database drop logfile group 2
Database altered.
SQL>alter database add logfile group 2 ('/data1/dbstat/redo02.dbf') size 2048M
Database altered.
SQL>select * from v$log
GROUP#THREAD# SEQUENCE# BYTESMEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------------
1 1 12 2147483648 1 NO INACTIVE203704 2009-09-17 19:04:23
2 1 0 2147483648 1 YES UNUSED 0
3 1 13 2147483648 1 NO CURRENT 203710 2009-09-17 19:04:38
现在就可以应对大规模的日志 *** 作了。
-The End-
重设日志文件大小
http://hi.baidu.com/jed519/item/47efa22f6b2e400a72863ef4
Thread 1 cannot allocate new log, sequence处理请教
由于业务比较繁忙,特别是使用高峰期时 经常报错
查看alert_orcl.log 找到的错误信息如下 Thread 1 cannot allocate new log, sequence ,
到网上查询 ,得出原因为 redo文件太小,需要设置更大的值,或者增加redo的个数
这样就涉及到一个问题, 如何设置redo的大小?或者个数设置多少为宜?
方法:加入新的大的日志文件,然后删掉旧的小的日志文件
假设现有三个日志组,每个组内有一个成员,每个成员的大小为50MB,现在想把此三个日志组的成员大小都改为100MB
1、创建2个新的日志组
alter database add logfile group 4 ('D:\ORACLE\ORADATA\ORADB\REDO04_1.LOG') size 8129k
alter database add logfile group 5 ('D:\ORACLE\ORADATA\ORADB\REDO05_1.LOG') size 8129k
2、切换当前日志到新的日志组
alter system switch logfile
alter system switch logfile
3、删除旧的日志组
alter database drop logfile group 1
alter database drop logfile group 2
alter database drop logfile group 3
4、 *** 作系统下删除原日志组1、2、3中的文件
5、重建日志组1、2、3
alter database add logfile group 1 ('D:\ORACLE\ORADATA\ORADB\REDO01_1.LOG') size 100M
alter database add logfile group 2 ('D:\ORACLE\ORADATA\ORADB\REDO02_1.LOG') size 100M
alter database add logfile group 3 ('D:\ORACLE\ORADATA\ORADB\REDO03_1.LOG') size 100M
6、切换日志组
alter system switch logfile
alter system switch logfile
alter system switch logfile
7、删除中间过渡用的日志组4、5
alter database drop logfile group 4
alter database drop logfile group 5
8、到 *** 作系统下删除原日志组4、5中的文件
9、备份当前的最新的控制文件
SQL>alter database backup controlfile to trace resetlogs
如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】
希望我的回答对您有所帮助,望采纳!
~ O(∩_∩)O~
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)