sniffer.data
CREATE TABLE IF NOT EXISTS [query_master]( [id] INTEGER PRIMARY KEY AUTOINCREMENT, [query] TEXT, UNIQUE([query])) CREATE TABLE IF NOT EXISTS [query_snapshot] ( [pkeyid] INTEGER PRIMARY KEY AUTOINCREMENT, [id] INTEGER, [threadid] INTEGER, [user] TEXT, [querytime] INTEGER, [uptime] INTEGER, [host] TEXT DEFAULT)
ここで、上のパターンと同じパターンが出現します。[query_snapshot]テーブルの[id]列は、実際のクエリ/テキストクエリを保存する[query_master]の行を識別します。また、[query]列では、[query_master]テーブルに同じクエリは1回しか保存されないよう、INSERT ...ON DUPLICATE KEY構造を使用できるよう、一意のキーを識別します。しかし、[query_snapshot]テーブルでは、クエリのインスタンスごとに1行が割り当てられます。
一般/スロークエリログアナライザーでは、同じテーブルを使用します。サーバーから取り出したログチャンクは構文解析され、テーブルはsniffer.dataデータベースにあるように追加されます。しかしながら、ログ解析に使用するテーブルはMEMORYテーブルであり、それを使用できるのはSQL Diagnostic Managerだけで、それも必要なときだけです。
Processlist(プロセスリスト)
さらに、SQL Diagnostic Manager processlist(プロセスリスト)機能では、SQLite MEMORYテーブル(サーバーごとの)を使用します。テーブル構造は、以下のようになります。
CREATE TEMPORARY TABLE IF NOT EXISTS [processlist]( [Id] INTEGER NOT NULL PRIMARY KEY, [User] TEXT, [Host] TEXT, [Db] TEXT, [Command] TEXT, [Time] INTEGER, [State] TEXT, [Info] TEXT, [Action] TEXT)
したがって、これがSQL Diagnostic ManagerにおけるMySQL processlist(プロセスリスト)の表示方法です。MySQLに直接接続したときとは違い、SQL Diagnostic Manager [processlist(プロセスリスト)]テーブルに対するSELECTクエリにより、WHERE、ORDER BY、GROUP BYなどでフィルタリング処理やソーティングができます。しかし、これはMEMORYテーブルなので、クエリはSQL Diagnostic Manager processlist(プロセスリスト)インターフェイス内からしか実行できません。
SQL Diagnostic Managerデータベーススキーマそのものに関する情報
SQL Diagnostic Managerで作成したすべてのデータベースにschema_versionテーブルがあります。毎回、SQL Diagnostic Managerを起動すると、SQL Diagnostic Managerはここでデータベースが最新のものであるかどうかを、現行プログラムバージョンで確認します。最新でない場合、SQL Diagnostic Managerは、起動時に、必要なスキーマアップグレードを実行します。スキーマ定義は以下のとおりです:
CREATE TABLE IF NOT EXISTS [schema_version] ( [schema_desc] TEXT, [schema_major_version] TEXT, [schema_minor_version] TEXT, PRIMARY KEY ([schema_major_version], [schema_minor_version]))