本連載では、現在MySQLを利用していて、チューニングやより大規模な環境に向けた構成の拡張を体系的に説明することを目的としています。MySQLのこれまでの開発と最新の動向から、チューニングやスケールアップ/スケールアウトの注意点を解説します。
第1回である今回は、MySQLのアーキテクチャをこれまでの開発の歴史と併せて解説します。
黎明期
MySQLの最初期のバージョンは1994年に開発され、1995年に公開されています。公開当初は独自のライセンスを採用していましたが、2000年にGPL v2を採用し、商用ライセンスとのデュアルライセンスモデルを採用しました。また、MySQLの代表的な機能の1つでもあるレプリケーションも2000年に実装されており、Webシステムとの相性の良さや構成の柔軟さから数多くのWebシステムで以前からMySQLが採用される理由にもなっています。
2001年にGA(General Availability=製品版)となったMySQL 3.23.31が現在のMySQLの原型に近い製品となっています。特に同3.23.34aでInnoDBストレージエンジンが追加されたことによってトランザクション対応のRDBMSとなりました。ストレージエンジンとは、データベースの表ごとに機能や性能を変えることができるMySQL独自の機能です。なお同3.23ではInnoDBはMAX binaryという特別なバイナリのみに同梱されていました。
図1 MySQLサーバアーキテクチャ概要
MySQLサーバの基本的なアーキテクチャは、以下のように大別されます。
接続からSQL実行までの共通部分
トランザクション管理やデータ永続化、インデックス管理などストレージエンジン固有部分
前者には接続の受付、ユーザ認証や権限管理、SQL文の構文解析と最適化が含まれています。ストレージエンジンの役割は大きく分けてトランザクション管理、データフォーマットの定義とデータ永続化、インデックス管理、ロックと排他制御があります。さらにInnoDBの全文検索機能や自動クラッシュリカバリ機能などストレージエンジン固有の機能があります。
表1 代表的なMySQLのストレージエンジン
InnoDB
MySQLのデフォルトのストレージエンジン。トランザクション対応、外部キーサポート、クラッシュリカバリ機能
MyISAM
以前のデフォルトのストレージエンジン。トランザクション非対応、テーブルレベルロック
MEMORY
指定した表をインメモリデータベース化。アクセス頻度の高いデータの参照用
Archive
データの追加と参照のみ可能。データを自動的に圧縮。ログ蓄積や監査用のテーブルなどに利用
ndbcluster
MySQL Clusterのベースとなる技術。リモートのサーバにデータを多重化して格納。トランザクション対応
CSV
データファイルの形式がCSV。ログやフラットファイルデータをSQLで分析する用途など
Blackhole
NULLデバイスのように書き込んだデータをすべて捨てる
変革期
MySQLにおける開発の歴史の中では、他社との提携や「買収」と言うキーワードは欠かせません。
最初の大きな提携はInnoDBの開発元であるフィンランドの企業Innobase Oyで、MySQL 4.1からInnoDBが標準で組み込まれることになりました。さらに2003年にはSAPとの連携によりMaxDBと言うSAPのビジネス製品向けのデータベースが作られたこともありました。2003年10月には、スウェーデンの通信機器ベンダ、エリクソンが設立したベンチャー企業Alzato社を買収し、通信機器用のデータベースとして開発されていたNDB ClusterをMySQLに統合して現在のMySQL Clusterとなっています。
MySQLの歴史の中での大きな事件の1つが、2005年のOracleによるInnobase Oyの買収です。これにより当時唯一といって良いMySQLのトランザクション対応ストレージエンジンがOracle傘下の会社によって開発されることになり、MySQLコミュニティは大いに動揺しました。このころにはMySQLデフォルトのストレージエンジンだったMyISAMをトランザクション対応とするプロジェクトMyISAM++が始動したこともありました(なお、その後Maria→Ariaと名称変更、2015年1月現在でもトランザクションは実装されていません) 。他にもサードパーティ製としてはHTTP経由でのバイナリストリーム機能を持ったPBXTやストレージエンジンレベルでのレプリケーション機能を持ったSolidDB(現在はIBMに買収されオープンソースプロジェクトのページのみが残っている)など様々なエンジンがMySQLのトランザクション対応エンジンにするべく開発が行われていました。2007年にはIBMとの提携によってIBM i(当時はIBM System i)用DB2のインターフェースとしてMySQLを利用するためのIBMDB2Iストレージエンジンも開発されていました。残念ながら現在はいずれも実質的に開発が停止してしまっています。
MySQLにとってのさらに大きな変化は2008年に訪れます。1月にSun MicrosystemsがMySQL ABの買収を発表しました。当時は無謀な機能追加によってMySQL 5.1が品質問題を抱えたまま製品リリースされてしまったり、開発リソースが不十分にも関わらず複数バージョンの並列開発を試みてMySQL 6.0や5.2が開発途中でキャンセルされるなど迷走していましたが、MySQL ABの創業者が離脱して新たな時代を迎えることとなりました。
Oracle時代
2010年にOracleによってSun Microsystemsの買収が完了し、現在MySQLはOracleの一部門として開発が継続されています。これにより、先にOracleに買収されていたInnoDBの開発部隊とMySQLの開発部隊が合併され、1つの組織として開発が進められることになりました。また、オープンソース製品としての性格も維持されているのも重要な点です。
買収があった2010年の12月にはOracleとして最初のMySQLサーバのメジャーバージョン5.5がリリースされ、2013年には最新版の5.6がリリースされました。2015年1月現在では次世代版のMySQL 5.7が開発中となっています。さらにMySQL Clusterは7.1から7.3までのメジャーバージョンがリリースされ、2015年には7.4のリリースが予定されています。開発や運用を支援するGUIツールのMySQL WorkbenchやPythonで書かれたスクリプト群のMySQL UtilitiesもGPLの元でリリースされています。サポートサービスや大規模システム向けのツールを有償版として提供するビジネスモデルに変化はありませんが、セキュリティ関連機能の追加やOracle Enterprise Managerを含むOracleの各ツール群からの動作保証など内容は改良され続けています。
図2 MySQLサーバの開発の歴史
次回はMySQLサーバのチューニングの基本をご紹介いたします。