DB

オンライン再定義(カラム追加)

DB

更新待ち時間結果 MySQLpt-online-schema-change -> 8秒ALGORITHM=INSTANT -> ほぼ無しALGORITHM=INPLACE -> 1秒ALGORITHM=COPY -> 5秒(カラム追加時間) Oracledbms_redefinition -> 0.5秒alter table -> ほぼ無し PostgreSQLpg-online-schema-change -> 8秒…

オンライン再定義(インデックス追加)

DB

更新待ち時間結果 MySQLpt-online-schema-change -> 8秒ALGORITHM=INPLACE -> ほぼ無しALGORITHM=COPY -> 5秒(インデックス作成時間) Oracledbms_redefinition -> 0.5秒onlineあり -> ほぼ無しonlineなし -> 8秒(インデックス作成時間) PostgreSQLconcurrent…

not nullカラムにnvl使用時の実行計画

DB

MySQL (8.0.29) drop table tab1;create table tab1(col1 int not null, col2 int);insert into tab1 values(1,1); select * from tab1; analyze table tab1; explain analyzeselect * from tab1 where ifnull(col1,0) != 0 and ifnull(col2,0) != 0; →NOT N…

レプリケーションのマルチスレッドREDO適用

DB

MySQL (8.0.29)https://gihyo.jp/dev/serial/01/mysql-road-construction-news/0079https://blog.s-style.co.jp/2022/01/8498/ マルチスレッドスレーブ (データベース間: 5.6~、データベース内: 5.7~) 8.0.27からデフォルトで有効 replica_parallel_worker…

サイレント接続

DB

MySQL (8.0.29) drop table tab1;create table tab1(col1 int,col2 varchar(30) );insert into tab1 values(1234567890,'1234567890');insert into tab1 values(1234567890,'1234567890'); select * from tab1; mysql --silent --skip-column-names test -e …

ヌルのインデックス

DB

Oracleはヌルデータのインデックスは作成されない。is not nullでインデックスが使用される場合がある。MySQL、PostgreSQL、SQL Serverはヌルデータもインデックスは作成され、使用される MySQL (8.0.29)https://qiita.com/omukaik/items/6c9d3018c6ab8fbef7…

パーティションインデックスのパーティションレベル削除

DB

MySQL (8.0.29) パーティションレベル削除不可(構文がない模様) Oracle (19c) drop table tab1 purge; create table tab1( col1 int primary key, col2 int, col3 int, col4 int) partition by range (col2) ( partition p1 values less than (0) , partitio…

プロシージャのIN/OUTパラメータ

DB

MySQL (8.0.29) drop procedure proc1; delimiter //create procedure proc1( in param1 numeric,inout param2 numeric,out param3 numeric)begin set param2 = param2 * param2; set param3 = param1 * 100;end//delimiter ; set @i = 10;set @j = 20;call …

code obfuscation

DB

MySQL (8.0.29)調べた限りなし Oracle (19c) https://docs.oracle.com/cd/F19136_01/lnpls/plsql-source-text-wrapping.html#GUID-AB6FFBAD-DE20-4197-A885-AF81F3766FA2https://www.shift-the-oracle.com/utility/wrap.html WRAP ユーティリティ vi proc1.s…

大量更新中のダンプ時間

DB

大量データ更新後、コミット前の状態でテーブルダンプを実行処理時間を通常時比較 1.5~3倍の時間となる MySQL (8.0.29) -- 1. テストデータ作成 drop table tab1;create table tab1( col1 int primary key ,col2 bigint ,col3 datetime ,col4 varchar(100) …

プルーニング条件の推移律

DB

内部結合した別テーブルに指定された条件を推移的に使用してインデックスアクセス時にパーティションプルーニングできるか確認 → いずれのDBも有効 MySQL (8.0.29) drop table tab1;create table tab1( col1 bigint ,col2 bigint ,col3 bigint) partition by…

外部結合→内部結合の自動変換

DB

いずれのDBも内部結合への自動変換をサポートしている模様 MySQL (8.0.29) drop table tab1;create table tab1( col1 bigint primary key ,col2 bigint ); drop table tab2;create table tab2( col1 bigint primary key ,col2 bigint ); drop procedure proc…

IN句上限

DB

MySQL (8.0.29)調べた限り上限はない模様実際には100万件程度が上限の模様 前提:CPU2コア、メモリ4Gtab1の件数=1 vim /etc/my.cnf max_allowed_packet = 1Ginnodb_buffer_pool_size = 2G : > a.sql echo "select 1 from tab1" >> a.sqlecho "where col1 in …

ブロック破損再現

DB

MySQL (8.0.29) drop table tab1; create table tab1( col1 numeric not null primary key, col2 char(255)); drop procedure proc1; delimiter //create procedure proc1(in x int)begin declare i int; set i = 1; start transaction; while i <= x do ins…

リアルタイム表示ツール

DB

MySQL (8.0.29) https://ja.getdocs.org/how-to-use-mytop-to-monitor-mysql-performance mytop yum install epel-release -y yum install mytop -y vim /root/.mytop host=localhostdb=testdelay=5port=3306socket=batchmode=0color=1idle=1 ※下記エラー回…

SQL文の最大長

DB

MySQL (8.0.29) max_allowed_packet show variables like 'max_allowed_packet'; デフォルト = 67108864 = 64MB 最大値 = 1073741824 = 1GB Oracle (19c)https://docs.oracle.com/cd/F19136_01/refrn/database-limits.html#GUID-ED26F826-DB40-433F-9C2C-8C6…

SQLチューニング(パーティションワイズ集約)

DB

hashパーティションパーティション数=101000万件のテーブルを作成個別キー数 = 100件でグループ化 MySQL (8.0.29) drop table tab1;create table tab1( col1 int,col2 int)partition by hash(col1)(partition p00, partition p01, partition p02, partition …

Kubernetesで各種DBを作成する

DB

MySQL (8.0.23)https://qiita.com/kazuki43zoo/items/7d6771f9d81a2dfd3755https://qiita.com/witchy/items/3a39b674097b86a44546 Ubuntu20にインストールしたkindで作業 -- 1. クラスタ作成 vim cluster.yml apiVersion: kind.x-k8s.io/v1alpha4kind: Clust…

Docker Composeで各種DBを作成する

DB

MySQL (8.0.23)https://blog1.mammb.com/entry/2020/10/13/222411 OS Ubuntu 22.04 sudo rm -rf ./mysqldatasudo mkdir -p ./mysqldatasudo chmod -R 777 ./mysqldata vim docker-compose.yml version: '3.8'services: mysql01: image: mysql:8.0.23 ports: …

SQLチューニング(パーティションワイズ結合)

DB

hashパーティションパーティション数=10100万件と1000万件のテーブルを作成 MySQL (8.0.29) drop table tab1;create table tab1(col1 int)partition by hash(col1)(partition p00, partition p01, partition p02, partition p03, partition p04, partition p…

Dockerで各種DBを作成する

DB

MySQL (8.0.23)https://qiita.com/TAMIYAN/items/ed9ec892d91e5af962c6https://note.com/shift_tech/n/nd5765c9f1c26 OS: Ubuntu 20.04 -- 1. イメージを取得 docker image pull mysql:8.0.23docker image ls -- 2. イメージをコンテナ化 docker container r…

CSV出力時とDB格納時のサイズ比較

DB

CSV出力時とDB格納時のサイズはおよそ同じ MySQL (8.0.29) -- 1. テストデータ作成 drop table tab1;create table tab1( col1 int primary key ,col2 bigint ,col3 datetime ,col4 varchar(100) ); drop procedure proc1; delimiter //create procedure proc…

AES暗号化

DB

MySQL (8.0.29)https://gihyo.jp/dev/serial/01/mysql-road-construction-news/0174 https://qiita.com/mhagita/items/899483f08347fddd9567 SET block_encryption_mode = 'aes-256-cbc'; select @@block_encryption_mode; 暗号化 select HEX(AES_ENCRYPT('…

ユーザ名、スキーマ名の変更

DB

MySQL (8.0.29)https://www.dbonline.jp/mysql/user/index3.html select user,host from mysql.user; rename user user1@'%' to user2@'%'; Oracle (19c) コマンドでの実行は不可 expdp test/test@pdb1 directory=ORA_DIR dumpfile=a.dmp logfile=a.log sche…

インラインビューの更新

DB

MySQL、PostgreSQL、SQL Serverはインラインビューの更新不可 MySQL (8.0.29) drop table tab1;create table tab1( col1 bigint primary key ,col2 bigint ); drop table tab2;create table tab2( col1 bigint primary key ,col2 bigint ); drop procedure p…

エクスポート/インポート、バックアップ/リストアのドライランオプション

DB

MySQL (8.0.29) mysqldumpにドライランオプションはない模様 Oracle (19c) expdpにはESTIMATE_ONLYオプションありimpdpにはESTIMATE_ONLYオプション無しRMANのbakupやrestoreにvalidateオプションはある expdp test/test@pdb1 directory=ORA_DIR logfile=a.l…

抽出条件付きインポート

DB

MySQL (8.0.29) 調べた限り、load data ステートメントで抽出条件は指定できない模様 Oracle (19c) ※抽出条件として、他テーブル参照の場合、ダンプファイル内のテーブルとインポート先DBのテーブルのどちらを参照しているかを確認する 結論:queryパラメー…

データ更新時のundo使用量(更新カラム数の影響)

DB

MySQL (8.0.28) -- 1. テストテーブル準備drop table tab1;create table tab1( col1 int primary key ,col2 char(100) ,col3 char(100) ,col4 char(100) ,col5 char(100) ,col6 char(100) ,col7 char(100) ,col8 char(100) ,col9 char(100) ); drop procedur…

データ更新時のundo使用量(インデックスの影響)

DB

MySQL (8.0.28) -- 1. テストテーブル準備drop table tab1;create table tab1( col1 int primary key ,col2 char(100) ,col3 char(100) ); drop procedure proc1; delimiter //create procedure proc1(in x int)begin declare i int; set i = 0; start trans…

リストパーティションのメンテナンス

DB

MySQL (8.0.28) drop table tab1; create table tab1( col1 int not null, col2 varchar(10) not null) partition by list columns ( col2 ) ( partition p1 values in ('AX','AY') , partition p2 values in ('BX','BY') , partition p3 values in ('CX','C…