超小規模環境のMySQL
OGATA Tetsuji (@xtetsuji)
2015/11/20 MySQL Casual Talks Vol.8
自己紹介
• 尾形 鉄次 (OGATA Tetsuji) a.k.a. @xtetsuji
• Blog: http://post.tetsuji.jp/
• Perlプログラマーで、最近はインフラもやっている
MySQL全然知らないのに
登壇することになった!
小規模環境ということで
積極的に恥をかきにきました
経歴
• 2003年から社会人としてIT企業で働き始める
• 2005年頃からMySQLを使ったサービスをいくつか開発
• それと平行して他のプロジェクトの色々なヘルプもする
• この頃は、RDBMS なら PostgreSQL or Oracle な時代
会社成長でサービスが増える
• 全社会議で経営陣が発言して運用保守サービスが増える
• 「あの会社をM&Aしました」
• 「子会社を海外に作って受託開発始めました」
• 「聞いてないよ」とは言えず、自身の開発業務の傍らで
即日新しいサービスの保守運用業務が増える
とあるガラケーコンテンツ
• オーソドックスな LAMP 構成
• 朝出社すると「おがたさん、サイトにログインできませ
ん!」という慌てた企画担当者
• どれどれと思ってログインを試しても、普通にログイン
できる
• 安 しつつ、次の日の朝出社(繰り返し)
さすがに原因調査
• だいたい毎日これなので、調べてみる
• エラー内容は「DBに問い合わせができない」だった
• さらに調べてみると、アプリ(Apache)が永続的な
MySQL接続をしていた
• 朝になったらそれがタイムアウトしているという
MySQL接続のタイムアウト
• 永続的な接続に長い間(たいてい数時間)データが流れ
ていなかった、サーバ側から接続を切られる場合がある
• クライアント側は接続しているつもりでもサーバ側から
切られる可能性があるので、pingなどの手段もある
• アクセスの少ないサイトだと、永続的なMySQL接続をし
ている prefork のサーバのうち暇なプロセスが見放され
ることは結構ある(設定で頑張らない場合)
Morning Bug
Morning Bug
夜にアクセスがない
• アクセスログを見ても、夜にほとんどアクセスがない
• 運が悪いプロセスは夜中完全に仕事が無い
• Morning Bug の発生
pingで頑張る?
• この話をすると ping とか設定ファイルとか、MySQLに
詳しい人達が色々教えてくれる
• だけど、MySQLの接続コストは他のRDBMSに比べても
相当低いって言われているし(伝聞)、よほどの規模の
サイトでもなければ都度接続でいいのではという結論
そのサイトの裏側は
• その後、全社会議があって、そのコンテンツの担当者が
発表しているのを聞きました
• 会員数が10人ほどとのこと
それ、全部
テスト端末では!?
撤退できない人達への悲哀
(というのは置いといて)
小さいプロジェクトの扱い
• 2005年ごろから他プロジェクトの保守運用系のヘルプを
するようになって分かったことは、企画担当者が「この
サイトは大きくなりますので(備えてください)」と言
うサービスの半数以上は大きくなる前に終了する
• 各プロジェクトには備えておきますという素振りを見せ
ておいて、一つくらい当たったら捻出できるリソースは
準備しておく程度でいい
「SQLiteで十分では」と
言いそうになったことも
MySQLプロトコルをしゃべる
別のものでもバレないのでは?
小規模しかやらない開発者は
• 長年 SQLのパフォーマンスを考えなくなる
• N+1問題とか以前に、ソレはないよというSQLが
• SELECT * FROM tbl; して毎回捨ててたり
• ちょっとアクセスが増えるだけで楽しいです
• 突然の DDoS !!!
小規模でもMySQL
• 小規模といっても、データストアを別のものにするのは
意外に面倒
• ファイルロックを正確に知っているプログラマーの方が
少なくなっているという衝撃の事実
• 複数ウェブサーバがNFS上のSQLiteファイルを読み込む
とか逆に高度だし
2015年の小規模
• クラウド全盛時代、RDSやAuroraで立ち上げて、ヒット
しなければ縮退もカンタンだし、規模が大きくなっても
対応できる良い時代
• 10年前はオンプレサーバの出し入れから必要だったのが
遠い昔のよう
手元にある小規模
• 社内の管理ツール等、普段ほとんどアクセスが発生しな
いものは今でもたくさんある
• 普通に素のPHPで都度接続のほうが健康的だったり
• 大規模になってから考えるでいい場合がほとんどだし、
備えておいたから大規模になってよかったという事例は
それほどなさそう(あくまで私感ですが)
超小規模
ネタの量も超小規模
おしまい

超小規模環境のMySQL #mysqlcasual