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

PDF
Devsの常識、DBAは非常識
PPTX
SQLアンチパターンNight ライトニングトーク
PDF
わたしを支える技術
PPTX
オンプレでもクラウドでも データベースサーバの運用
PPTX
SQL Server replication overview (JP)
PDF
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
PDF
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
PDF
MySQL 5.7が魅せる新しい運用の形
Devsの常識、DBAは非常識
SQLアンチパターンNight ライトニングトーク
わたしを支える技術
オンプレでもクラウドでも データベースサーバの運用
SQL Server replication overview (JP)
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
MySQL 5.7が魅せる新しい運用の形

What's hot (20)

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

Viewers also liked (20)

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

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

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

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