SlideShare a Scribd company logo
PostgreSQL使いの
エンジニアから見たMySQL
北川 俊広
自己紹介
北川 俊広(きたがわ としひろ)
株式会社ビズリーチ
ビズリーチ事業本部
プロダクト開発部
SIer → ビズリーチ
PostgreSQL 歴:7年
MySQL 歴:7ヶ月
発表の流れ
• えっ!?と思ったこと
• 優れているところ
• 劣っているところ
えっ!?と思ったこと
えっ、innodb_buffer_poolに物理メモリの80%!?
• PostgreSQL 9.5.4文書
shared_buffersに対する妥当な初期値はシステムメモリの25%です。PostgreSQLはオペレー
ティングシステムキャッシュにも依存するため、shared_buffersにRAMの40%以上を割り当て
ても、それより小さい値の時より動作が良くなる見込みはありません。
• MySQL 5.6 リファレンスマニュアル
専用のデータベースサーバーでは、これを最大でマシンの物理メモリーサイズの 80% まで設
定することがあります。
InnoDB のバッファープールとオペレーティングシステムのファイルシステムキャッシュ間での
二重バッファリングを回避する際に、O_DIRECT が役立つことがあります。
えっ、UPDATE って行ロックじゃないの!?
• インデックス列を条件に指定した場合は、行ロックになる。
• インデックスのない列を条件に指定するとテーブルロックが掛かる。
mysql> SELECT * FROM fruits;
+----+--------+-------+
| id | name | price |
+----+--------+-------+
| 1 | apple | 110 |
| 2 | peach | 120 |
| 3 | melon | 980 |
| 4 | banana | 100 |
| 5 | mango | 580 |
+----+--------+-------+
5 rows in set (0.00 sec)
mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
mysql> UPDATE fruits SET price = '98’
WHERE name = 'apple';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql>
mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
mysql> UPDATE fruits SET price = 110
WHERE name = 'banana';
ERROR 1205 (HY000): Lock wait timeout
exceeded; try restarting transaction
プライマリーキーは id 列、インデックスはなし。
えっ、mysqldumpでもロックするの!?
• オプションを付けないと、テーブルロックで一貫性を保証する。
プラガブルストレージエンジン設計のため、トランザクション機能が
ないエンジンに合わせてある?
• innodbの場合は、--single-transactionオプション必須。
えっ、文字列の大文字小文字区別しないの!?
• CHAR, VARCHAR 型は、= 比較で大文字小文字を区別しない!
• 区別したい場合は、BINARY 型、VARBINARY 型を使用する。
mysql> SELECT 'MySQL' = 'mysql';
+-------------------+
| 'MySQL' = 'mysql' |
+-------------------+
| 1 |
+-------------------+
1 row in set (0.00 sec)
mysql> SELECT BINARY 'MySQL' = 'mysql';
+--------------------------+
| BINARY 'MySQL' = 'mysql' |
+--------------------------+
| 0 |
+--------------------------+
1 row in set (0.00 sec)
test-> SELECT 'PSQL' = 'psql';
?column?
----------
f
(1 行)
test-> SELECT 'PSQL' ILIKE 'psql';
?column?
----------
t
(1 行)
えっ、なんでこんなに複合インデックスが多いの!?
• 1テーブルにつき1インデックスしか使えない仕様。
• AND 条件などを考えてインデックスを設計する必要あり。
えっ、それって本当にトランザクション!?
• 実行途中にエラーが発生しても、部分的にコミットできる。
• ACID - トランザクションシステムの持つべき性質
• Atomicity(不可分性)
• Consistency(一貫性)
• Isolation(独立性)
• Durability(永続性)
優れているところ
レプリケーションの形式や範囲が選べる
• レプリケーション形式
• ステートメントベース
• 行ベース
• 混合形式
• 特定のDBやテーブルのみをレプリケーションすることもできる。
• 現在のPostgreSQLは、部分的なレプリケーションはできない。
オンラインDDL
• DML をできるだけブロックせずに ALTER TABLE を実行する機能。
• 注意点
• 実行時にメタデータロック(排他ロック)が一瞬かかる。
• 更新ログがあふれると失敗する。
innodb_online_alter_log_max_size でサイズを指定。
• PostgreSQL もインデックス作成はオンラインでできる。
テーブルのパーティショニングがしやすい
• MySQLは、CREATE TABLE 文に PARTITION 句を追加するだけで
パーティショニング可能。
• PostgreSQL は、継承機能を用いてパーティショニングを設定するため、
操作が煩雑。
• マスターテーブルを作成
• 子テーブルを作成
• 子テーブルにチェック制約を設定
• マスターテーブルから子テーブルへデータを中継するために、マスタテーブルにトリガを作成
劣っているところ
mysqlコマンドの使い勝手
• タブ補完の精度が良くない。
PostgreSQL は、SQL 構文を理解して補完してくれる。
• ページャがデフォルトで設定されていない。
マニュアルが少しわかりづらい
• ストレージエンジンやマイナーバージョンによる動作の違いが多い。
サーバーシステム変数が多い
• MySQL 5.6
SHOW VARIABLES;
445 rows
• PostgreSQL 9.3
SHOW ALL;
231 rows
たまに指示を無視する
集合を返す関数が用意されていない
• 集合を返す関数は、テストデータを用意するときなどに使えて便利。
• PostgreSQLには、generate_series() がある。
test=# SELECT * FROM generate_series(1,3) AS i;
i
---
1
2
3
(3 rows)
インデックスの使用状況が簡単に取れない
• インデックスを削除する際に、それが使用されているかどうか判断
できなくて困った。
• PostgreSQLの場合は、 pg_stat_user_indexes テーブルで使用
状況が見られる。
test=# SELECT * FROM pg_stat_user_indexes;
relid | indexrelid | schemaname | relname | indexrelname | idx_scan | idx_tup_read | idx_tup_fetch
-------+------------+------------+---------+--------------+----------+--------------+---------------
88556 | 88560 | public | fruits | fruits_pkey | 0 | 0 | 0
96745 | 96748 | public | test01 | test01_pkey | 0 | 0 | 0
(2 rows)
ご清聴ありがとうございました。

More Related Content

What's hot (20)

PDF
MySQLチューニング
yoku0825
 
PPTX
Sql database でも使えるほにゃらら
Oda Shinsuke
 
PPTX
dimSTATから見るベンチマーク
hiroi10
 
PDF
MySQL 5.7の次のMySQLは
yoku0825
 
PDF
MySQLやSSDとかの話 前編
Takanori Sejima
 
PDF
Osc2015北海道 札幌my sql勉強会_波多野_r3
Nobuhiro Hatano
 
PPTX
MySQL clients
yoku0825
 
PPTX
Azure sql database 入門 2014年10月版
貴仁 大和屋
 
PDF
MySQLステータスモニタリング
yoku0825
 
PDF
MySQLを割と一人で300台管理する技術
yoku0825
 
PDF
PostgreSQLの関数属性を知ろう
kasaharatt
 
PDF
ゆるふわMySQLフェイルオーバー
Kimitoshi Takahashi
 
PPTX
MySQLの運用でありがちなこと
Hiroaki Sano
 
PDF
MySQL 初めてのチューニング
Craft works
 
PDF
How to backup your mroonga database?
yoku0825
 
PPTX
Azure SQLデータベース最新動向&TIPS
nishioka1
 
PDF
MHAの次を目指す mikasafabric for MySQL
yoku0825
 
PDF
今から備えるMySQL最新バージョン5.7
yoku0825
 
KEY
道具を磨くことのススメ
Kenichi Masuda
 
PPT
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
dcubeio
 
MySQLチューニング
yoku0825
 
Sql database でも使えるほにゃらら
Oda Shinsuke
 
dimSTATから見るベンチマーク
hiroi10
 
MySQL 5.7の次のMySQLは
yoku0825
 
MySQLやSSDとかの話 前編
Takanori Sejima
 
Osc2015北海道 札幌my sql勉強会_波多野_r3
Nobuhiro Hatano
 
MySQL clients
yoku0825
 
Azure sql database 入門 2014年10月版
貴仁 大和屋
 
MySQLステータスモニタリング
yoku0825
 
MySQLを割と一人で300台管理する技術
yoku0825
 
PostgreSQLの関数属性を知ろう
kasaharatt
 
ゆるふわMySQLフェイルオーバー
Kimitoshi Takahashi
 
MySQLの運用でありがちなこと
Hiroaki Sano
 
MySQL 初めてのチューニング
Craft works
 
How to backup your mroonga database?
yoku0825
 
Azure SQLデータベース最新動向&TIPS
nishioka1
 
MHAの次を目指す mikasafabric for MySQL
yoku0825
 
今から備えるMySQL最新バージョン5.7
yoku0825
 
道具を磨くことのススメ
Kenichi Masuda
 
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
dcubeio
 

Viewers also liked (20)

PPTX
Riotjsハンズオン
omi end
 
PPTX
Unity + AndroidでモバイルVRハンズオン
gunn0430
 
PPTX
バッチ高速化のあゆみ
dcubeio
 
PPTX
[D3]サーバーレスでサービスを作ってみた話
dcubeio
 
PDF
Google apps scriptを使って業務改善
dcubeio
 
PDF
機械学習を支えるX86 64の拡張命令セットを読む会 20170212
dcubeio
 
PDF
AWSをテラフォーミングする会(Terraformハンズオン)
正貴 小川
 
PPT
覚えて帰ろうJavaデザインパターン
dcubeio
 
PPTX
はじめてのAws lambda
dcubeio
 
PDF
React Native GUIDE
dcubeio
 
PDF
サーバーサイドDartを試してみる
Satoshi KOBAYASHI
 
PDF
15分でわかった気になるdart
Satoshi KOBAYASHI
 
PPTX
React NativeでTwitterクライアントを作ってみよう
dcubeio
 
PDF
Angular+Dart=より快適なSPA開発
Satoshi KOBAYASHI
 
PDF
今からでも大丈夫!Firebase入門
Tomoki Koga
 
PPTX
簡単、クレカ決済! PAY.JPを使ったクレカ決済の仕組み・開発運用時の考慮点について
dcubeio
 
PDF
こんなに使える!今どきのAPIドキュメンテーションツール
dcubeio
 
PDF
Ansibleで始めるインフラ構築自動化
dcubeio
 
PPTX
HR Tech x 機械学習 導入事例紹介
dcubeio
 
PPTX
おっさんES6/ES2015,React.jsを学ぶ
dcubeio
 
Riotjsハンズオン
omi end
 
Unity + AndroidでモバイルVRハンズオン
gunn0430
 
バッチ高速化のあゆみ
dcubeio
 
[D3]サーバーレスでサービスを作ってみた話
dcubeio
 
Google apps scriptを使って業務改善
dcubeio
 
機械学習を支えるX86 64の拡張命令セットを読む会 20170212
dcubeio
 
AWSをテラフォーミングする会(Terraformハンズオン)
正貴 小川
 
覚えて帰ろうJavaデザインパターン
dcubeio
 
はじめてのAws lambda
dcubeio
 
React Native GUIDE
dcubeio
 
サーバーサイドDartを試してみる
Satoshi KOBAYASHI
 
15分でわかった気になるdart
Satoshi KOBAYASHI
 
React NativeでTwitterクライアントを作ってみよう
dcubeio
 
Angular+Dart=より快適なSPA開発
Satoshi KOBAYASHI
 
今からでも大丈夫!Firebase入門
Tomoki Koga
 
簡単、クレカ決済! PAY.JPを使ったクレカ決済の仕組み・開発運用時の考慮点について
dcubeio
 
こんなに使える!今どきのAPIドキュメンテーションツール
dcubeio
 
Ansibleで始めるインフラ構築自動化
dcubeio
 
HR Tech x 機械学習 導入事例紹介
dcubeio
 
おっさんES6/ES2015,React.jsを学ぶ
dcubeio
 
Ad

Similar to PostgreSQL使いのエンジニアから見たMySQL (20)

PDF
MySQL 5.5 Update #denatech
Mikiya Okuno
 
PPTX
【基礎編】社内向けMySQL勉強会
Yuji Otani
 
PDF
Enter the-dolphine
Mikiya Okuno
 
PDF
オープンソース・データベースの最新事情
Meiji Kimura
 
PPTX
[OSC 2017 Tokyo/Fall] OSSコンソーシアム DB部会 MySQL 8.0
Ryusuke Kajiyama
 
PDF
ペパボ de MySQL
yoku0825
 
PDF
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
 
PDF
Maria db
nekogeruge_987
 
PPT
MySQL最新情報と、データベースのお勉強のススメ-第68回PHP勉強会
sakaik
 
PDF
光のMySQL 5.7
yoku0825
 
PPTX
SQLチューニング入門 入門編
Miki Shimogai
 
PDF
PostgreSQL運用管理入門
Yoshiyuki Asaba
 
PPTX
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
Miki Shimogai
 
PDF
InnoDBのすゝめ(仮)
Takanori Sejima
 
PDF
DTraceによるMySQL解析ことはじめ
Mikiya Okuno
 
PPT
20090107 Postgre Sqlチューニング(Sql編)
Hiromu Shioya
 
PDF
MySQL最新情報 ※2015年9月5日「第1回 関西DB勉強会」での発表資料
yoyamasaki
 
ODP
MySQLのパフォーマンスの話
Tetsuro Ikeda
 
PDF
Oss x user_meeting_6_postgres
Kosuke Kida
 
PDF
20150920 中国地方db勉強会
yoyamasaki
 
MySQL 5.5 Update #denatech
Mikiya Okuno
 
【基礎編】社内向けMySQL勉強会
Yuji Otani
 
Enter the-dolphine
Mikiya Okuno
 
オープンソース・データベースの最新事情
Meiji Kimura
 
[OSC 2017 Tokyo/Fall] OSSコンソーシアム DB部会 MySQL 8.0
Ryusuke Kajiyama
 
ペパボ de MySQL
yoku0825
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
 
Maria db
nekogeruge_987
 
MySQL最新情報と、データベースのお勉強のススメ-第68回PHP勉強会
sakaik
 
光のMySQL 5.7
yoku0825
 
SQLチューニング入門 入門編
Miki Shimogai
 
PostgreSQL運用管理入門
Yoshiyuki Asaba
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
Miki Shimogai
 
InnoDBのすゝめ(仮)
Takanori Sejima
 
DTraceによるMySQL解析ことはじめ
Mikiya Okuno
 
20090107 Postgre Sqlチューニング(Sql編)
Hiromu Shioya
 
MySQL最新情報 ※2015年9月5日「第1回 関西DB勉強会」での発表資料
yoyamasaki
 
MySQLのパフォーマンスの話
Tetsuro Ikeda
 
Oss x user_meeting_6_postgres
Kosuke Kida
 
20150920 中国地方db勉強会
yoyamasaki
 
Ad

PostgreSQL使いのエンジニアから見たMySQL