SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Server エンジニアが学ぶ OSS DB (MySQL / PostgreSQL) の情報取得

leave a comment

普段は SQL Server を使用しているのですが、OSS の DB についても学習をする必要が出てきました。
私の場合、SQL Server を使用する際には開発ではなく管理側となり「SQL Server の各種情報を取得し分析する」ことが多いです。

その中で「OSS DB では通常、SQL Server で確認しているこの情報はどのように取得するのか?」という調査をすることになるのですが、「取り掛かりとしてどこを見ればよいのか」の勘所がわからなくて四苦八苦しています。

そこで、基本的なメトリクスを取得するためにはどのような情報を取得すればよいのかを少し調べてみました。

さらに踏み込んで情報取得について検討を行う必要があるとは思いますが、私が情報を確認しようとした場合には、これらの情報を足掛かりすると対応ができそうな感じでした。

検証環境の構築

最初に作業をしなくてはいけないのは、実際に情報取得の検証を行うための環境の構築です。
構築した環境には、「ある程度データの入っている環境」があると、操作がしやすいかと思います。
環境をすぐに初期状態に戻せると検証もしやすいのではないでしょうか。

そういう時はサクッと Docker を使うのが楽かと思います。
MySQL / PostgreSQL のサンプルデータが含まれている Docker のイメージが公式ではありませんが、コミュニティイメージとして公開されていますので、最初はこちらを使用すると良いのではないでしょうか。

ベースとなるサンプルデータは次のものが使用されているようです。

SQL Server でいう AdventureWorks / Wide World Importes ですね。

MySQL

PostgreSQL

これらの Docker イメージを使用することで、最初からデータが投入されている環境を構築することができます。

OSS DB の特徴としてソースが公開されているというものがあるかと思いますが、各ソースは次の場所になる感じですかね。

 

クライアントツールの導入

検証環境の構築が終わったら次は環境に接続するためのツールの導入です。

OSS DB に接続できるツールは様々なものが公開されていますが、「各ソフトのすべての機能を活用する」という観点ですと公式のクライアントを使用するのが手っ取り早いですので、各種ツールを導入します。

MySQL

PostgreSQL

PostgreSQL については、Azure Data Studio (ADS) に PostgreSQL 拡張機能をインストール することで接続もできますので、ある程度クエリの実行に慣れてきたら ADS で操作をした方が SQL Server のエンジニアは作業がしやすいのかもしれませんね。

MySQLとPostgreSQLコマンド比較表 も操作をする際にはわかりやすいですね。

ここまでの導入が終わると、SQL Server を触っていたエンジニアであれば、各種 DB の接続をして、簡単なクエリの実行まではできるようになるかと思います。

 

公式ドキュメント

検証を行う際に構文等の確認をするのは公式ドキュメントになりますので、ドキュメントの場所も把握しておく必要があるかと思います。

MySQL

PostgreSQL

 

SQL Server のエンジニアは、Microsoft のドキュメントになじみが深いケースも多いのではないでしょうか。
Azure でも MySQL / PostgreSQL が提供されていますので、基本的な操作方法は Azure のドキュメントから学習するというもの一つの方法かと思います。

 

各種情報の取得方法

最後の大きな内容となるのが「SQL Server で取得していた各種情報を各 OSS DB でどのように取得するか」です。

SQL Server であれば動的管理ビュー (DMV) を介して情報の取得を行っていましたが、これと等価の情報をいかにして取得するのかがポイントとなってきます。

基本情報

一つの方法として考えられるのが INFOMATION_SCHEMA から情報を取得する方法です。
INFORMATION_SCHEMA は ISO 標準定義のスキーマとなりますので、各種 DB でもある程度つぶしが効くようになっています。

MySQL : INFORMATION_SCHEMA

PostgreSQL : INFORMATION_SCHEMA

他にも関数で取得するというケースもあるようですので、基本的な関数の把握も必要かもしれませんね。

MySQL : 情報関数

PostgreSQL: 情報関数

応用情報

次に考える必要があるのが「INFORMATION_SCHEMA 以外で、各 DB 固有の情報を取得するための方法」です。
INFORMATION_SCHEMA を使用することで基本的な情報が取得できるかもしれませんが、各 DB 固有の情報については取得できていない可能性があります。

MySQL でしたら、InnoDB INFORMATION_SCHEMAMySQL パフォーマンススキーマ、PostgreSQL であれば、統計情報コレクタ / pg_stat_statements モジュール等があるようです。

以下は、pg_stat_statements を学習する際の参考。

SQL Server だけを触っていると「どこから情報を取得すればよいのか?」のイメージがぱっと思いつかないので、情報の取得方法に打ち手は、OSS のメトリクス収集の仕組みの助けを借りてみます。

今回は次のようなプロダクトの情報を参考にさせていただきたいと思います。

MySQL

InnoDB の INFORMATION_SCHEMA テーブルMySQL パフォーマンススキーマ / SHOW 構文 (Global) を使用して各種情報を取得するのが一般的な方法となるようですね。

PostgreSQL

統計情報コレクタ / システム情報関数 / システム管理関数 / システムカタログ / pg_stat_statements を使用して各種情報を取得するのが一般的な方法となるようですね。

Share

Written by Masayuki.Ozawa

5月 12th, 2021 at 1:41 pm

Leave a Reply