在mysql中有参数可以控制什么时候及如何写log,之前只知道oracle在commit的时候总是会写log,在11g有两个参数commit_logging和commit_wait来控制什么时候写log。
SQL> show parameter commit_logging;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
commit_logging string
SQL> show parameter commit_wait
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
commit_wait string
下面是参数的解释
commit_logging可以设置成immeidate|batch,控制是否批量
IMMEDIATE参数使日志写入进程(LGWR)将事务的重做信息写入日志。 此操作选项强制磁盘I / O,因此可以降低事务吞吐量。
batch:这个参数会先缓存事务的redo,达到一定的量后再写入到log中,这称为“组提交”.
默认是immediate模式
commit_wait 这个参数可以设置成nowait wait force_wait
wait的模式下只是在redo写到磁盘上后commit才会返回,不管是batch还是immeidate方式,客户端接受到commit的成功消息,那么事务就已经是持久化的了。
nowait就是不管写没写完,都告诉客户端完成了。可能会导致数据的的丢失,但是速度更快了。
默认的commit语句其实是COMMIT WORK WRITE WAIT IMMEDIATE.所以这2个参数能跟mysql的几个控制日志写的参数对应起来,目的都是一样的。