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