コミット前の書き込み

 

(12cR1)

--準備

drop tablespace test including contents and datafiles;
create tablespace test datafile '/u01/app/oracle/oradata/orcl/test.dbf' size 10M autoextend on maxsize unlimited;

drop table tab1;
create table tab1(col1 int) tablespace test;


--監視

watch -n 2 ls -lh /u01/app/oracle/oradata/orcl/test.dbf

while true; do
echo "set linesize 150"
echo "select to_char(sysdate,'YYYY/MM/DD HH24:MI:SS') from dual;"
echo "select * from v\$log;"
echo "select sum(bytes)/1024/1024 mb from user_segments where segment_name = 'TAB1';"
sleep 2 ;
done | sqlplus test/test


--データ投入

declare
begin
while true loop
insert into tab1 values(1);
end loop;
end;
/


→コミット前でもWALに書き込みは発生する。データファイルに書き込まれる。オブジェクトサイズも増加する。

 

(5.6)

--準備
use mysql
drop database test;
create database test;
use test


drop table tab1;
create table tab1(col1 int);


--監視

watch -n 2 ls -lh /var/lib/mysql/test/tab1*
watch -n 2 ls -lh /var/lib/mysql/mysql-bin-log*


while true; do
echo "select CURRENT_TIMESTAMP;"
echo "select sum(data_length) /1024/1024 mb from information_schema.tables where TABLE_NAME = 'tab1';"
sleep 2 ;
done | mysql test

 

--データ投入

drop procedure proc1;
delimiter //
create procedure proc1()
begin
start transaction;
while true do
insert into tab1 values(1);
end while;
end
//
delimiter ;

call proc1();

→コミット前でもデータファイルに書き込まれる。オブジェクトサイズも増加する。バイナリログには書き込まれない。


(9.6)


--準備


drop table tab1;
create table tab1(col1 int);

select oid,* from pg_database;
select oid,* from pg_class where relname = 'tab1';

 

--監視

watch -n 2 ls -lh /var/lib/pgsql/9.6/data/base/49176/57371
watch -n 2 ls -lh /var/lib/pgsql/9.6/data/pg_xlog


while true; do
echo "select clock_timestamp();"
echo "SELECT pg_size_pretty(pg_relation_size('tab1'));"
sleep 2 ;
done | psql test

 


--データ投入

start transaction;

DO $$
DECLARE
BEGIN
WHILE TRUE LOOP
insert into tab1 values(1);
END LOOP;
END
$$
;

→コミット前でもWALに書き込みは発生する。データファイルに書き込まれる。オブジェクトサイズも増加する。
その後しばらく待つと、auto vacuumによりデータファイルとオブジェクトサイズは0に戻る

 

(2014)

--準備

use master;
go
drop database test;
go

CREATE DATABASE [test]
CONTAINMENT = NONE
ON PRIMARY
( NAME = N'test', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\test.mdf' , SIZE = 5MB , FILEGROWTH = 1MB )
LOG ON
( NAME = N'test_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\test_log.ldf' , SIZE = 5MB , FILEGROWTH = 1MB )
GO


use test;
go

drop table tab1;
go
create table tab1(col1 varchar(100));
go

select * from sys.database_files;
go

 

--監視

---------------------
@echo off

:LOOP
dir "C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\test*"
sqlcmd -d test -b -Q "set nocount on; select getdate();"
sqlcmd -d test -b -Q "set nocount on; EXEC sp_spaceused 'tab1';"
timeout 2 > nul
goto :LOOP

exit /b 0

------------------------


--データ投入

begin transaction;

WHILE 1=1
BEGIN
INSERT INTO tab1 (col1) VALUES ('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
END
;


→コミット前でもトランザクションログに書き込みは発生する。データファイルに書き込まれる。オブジェクトサイズも増加する。