Oracle Database XEがミッションクリティカルに強いのかMySQLと比較して検証してみました。

Oracle Database XEがミッションクリティカルに強いのかMySQLと比較して検証してみました。

色々なブログや記事で、oracleのデータベースはミッションクリティカルに強いというのを良く目にしますが、実際のところどうなのか、oracleユーザーで動作しているプロセスを殺してどのように動くのか検証してみました。

oracleのプロセスの検証

下記がoracleのプロセス群です。

  • xe_pmon_XE
  • xe_psp0_XE
  • xe_mman_XE
  • xe_dbw0_XE
  • xe_lgwr_XE
  • xe_ckpt_XE
  • xe_smon_XE
  • xe_reco_XE
  • xe_cjq0_XE
  • xe_mmon_XE
  • xe_mmnl_XE
  • xe_d000_XE
  • xe_s000_XE
  • xe_s001_XE
  • xe_s002_XE
  • xe_s003_XE
  • xe_qmnc_XE
  • xe_q001_XE
  • xe_q000_XE

xe_pmon_XEプロセスの検証

ps ax | grep xe_pmon_XE
kill -9 5626

killコマンドでプロセスが終了。
その他のoracle権限で動作していたプロセスも数秒後終了しました。

PMONプロセスはユーザープロセスに障害が発生したときに、回復処理を行うプロセスのようです。
心強いプロセスです。
/etc/init.d/oracle-xe restartで動作し直しました。


xe_psp0_XEプロセスの検証

ps ax | grep xe_psp0_XE
kill -9 6042

killコマンドでプロセスが終了。
その他のoracle権限で動作していたプロセスも終了しました。
/etc/init.d/oracle-xe restartで動作し直しました。


xe_mman_XEプロセスの検証

ps ax | grep xe_mman_XE
kill -9 6046

killコマンドでプロセスが終了。
その他のoracle権限で動作していたプロセスも終了しました。
/etc/init.d/oracle-xe restartで動作し直しました。


xe_dbw0_XEプロセスの検証

ps ax | grep xe_dbw0_XE
kill -9 6210

killコマンドでプロセスが終了。
その他のoracle権限で動作していたプロセスも終了しました。
/etc/init.d/oracle-xe restartで動作し直しました。


xe_lgwr_XEプロセスの検証

ps ax | grep xe_lgwr_XE
kill -9 6220

killコマンドでプロセスが終了。
その他のoracle権限で動作していたプロセスも終了しました。

REDOログバッファで変更された内容を、REDOログファイルへ書き込むプロセスです。
/etc/init.d/oracle-xe restartで動作し直しました。


xe_ckpt_XEプロセスの検証

ps ax | grep xe_ckpt_XE
kill -9 6461

killコマンドでプロセスが終了。
その他のoracle権限で動作していたプロセスも終了しました。

特定のタイミングで、データベースライターと制御ファイルを更新し、データベースの整合性を維持するプロセスです。
/etc/init.d/oracle-xe restartで動作し直しました。


xe_smon_XEプロセスの検証

ps ax | grep xe_smon_XE
kill -9 6538

killコマンドでプロセスが終了。
その他のoracle権限で動作していたプロセスも終了しました。

SMONプロセスはデータベースの異常終了を検知し、データベースが起動したときに、回復処理を行うプロセスです。これも又心強いプロセスです。
/etc/init.d/oracle-xe restartで動作し直しました。


xe_reco_XEプロセスの検証

ps ax | grep xe_reco_XE
kill -9 6626

killコマンドでプロセスが終了。
その他のoracle権限で動作していたプロセスも終了しました。
/etc/init.d/oracle-xe restartで動作し直しました。


xe_cjq0_XEプロセスの検証

ps ax | grep xe_cjq0_XE
kill -9 6703

killコマンドでプロセスが終了。
数秒後違うPIDで復活!


xe_mmon_XEプロセスの検証

ps ax | grep xe_mmon_XE
kill -9 6784

killコマンドでプロセスが終了。
数秒後違うPIDで復活!


xe_mmnl_XEプロセスの検証

ps ax | grep xe_mmnl_XE
kill -9 6876

killコマンドでプロセスが終了。
数秒後違うPIDで復活!


xe_qmnc_XEプロセスの検証

ps ax | grep xe_qmnc_XE
kill -9 6876

killコマンドでプロセスが終了。
様子が変わらず。
/etc/init.d/oracle-xe restartで動作し直しました。



xe_d000_XEプロセスの検証

ps ax | grep xe_d000_XE
ps ax | grep xe_s000_XE
ps ax | grep xe_s001_XE
ps ax | grep xe_s002_XE
ps ax | grep xe_s003_XE
ps ax | grep xe_q000_XE
ps ax | grep xe_q001_XE
kill -9 6966
kill -9 6968
kill -9 6970
kill -9 6972
kill -9 6974

killコマンドでプロセスが終了。
数秒後違うPIDで復活!おお!

プロセスが万が一強制終了しても、強制終了したプロセスを復活させる機能があるなんて!凄い!

MySQLのプロセスの検証

mysql - 5.0.45-7の場合下記2つのプロセスが起動している。

  • /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --log-err…
  • /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysql

/usr/libexec/mysqldのプロセスを終了させると、先程のoracleのプロセスのようにすぐ復活した。
しかし、/bin/sh /usr/bin/mysqld_safeのプロセスを先に終了させてから、
/usr/libexec/mysqldのプロセスを終了させると、MySQLのプロセスは完全に終了してしまいました。

おそらく、/bin/sh /usr/bin/mysqld_safeのプロセスが/usr/libexec/mysqldのプロセスを監視しているのでしょう。

まとめ

上記のような結果になりましたが、oracleのプロセスは複数のプロセス同士が監視をし合うという安全な作りになっているが、MySQLは2つしかプロセスが存在しないのでoracleに比べると脆いような印象を受けました!



[PR]Spreeの情報を集めています。

ECを持ちたい方、仕事でECを使いたい方向けのコミュニティサイトです。
このサイトでは世界で最も使用されているECの1つであるSpreeについての情報を提供しています。
http://spreecommerce.jp/