Oracle から Cloud SQL for MySQL への移行: 用語と機能

このドキュメントは、Oracle® 11g/12c データベースから Cloud SQL for MySQL バージョン 5.7 の第 2 世代インスタンスへの移行を計画し、実施する際に必要な情報とガイダンスを提供するシリーズの一つです。このシリーズは次のパートから構成されています。

用語

このセクションでは、Oracle と Cloud SQL for MySQL のデータベース用語の類似点と相違点について説明します。また、それぞれのデータベース プラットフォームの主な要素を確認して比較します。この比較では、アーキテクチャ上の違いから Oracle バージョン 11g と 12c を区別しています(たとえば、Oracle 12c ではマルチテナント機能を導入しています)。ここで言及されている Cloud SQL for MySQL のバージョンは 5.7.x です。

Oracle 11g と Cloud SQL for MySQL の用語の違い

Oracle 11g 説明 Cloud SQL for MySQL 主な違い
インスタンス 1 つの Oracle 11g インスタンスで保持できるデータベースは 1 つのみです。 インスタンス 1 つの MySQL インスタンスで複数のデータベースを保持できます。
データベース 1 つのデータベースが 1 つのインスタンスとみなされます(データベースの名前はインスタンス名と同じです)。 データベース 複数または 1 つのデータベースが複数のアプリケーションに対応します。
スキーマ スキーマとユーザーはどちらもデータベース オブジェクトのオーナーとみなされるため、この 2 つは同義です(ユーザーの作成では、スキーマを指定したりユーザーをスキーマに割り当てたりする必要はありません)。 スキーマ スキーマはデータベースと呼ばれます。データベース オブジェクトは特定のスキーマ / データベースの下で作成されます。
ユーザー 両方ともデータベース オブジェクトのオーナーであるため、スキーマと同義です(例: インスタンス → データベース → スキーマ/ユーザー → データベース オブジェクト)。 ユーザー 特定のスキーマ / データベースでデータベース オブジェクトに対して接続または変更する特定の権限が付与されたデータベース ユーザー(例: インスタンス → データベース / スキーマ → データベース オブジェクト)。
ロール グループとして連結できる定義済みのデータベース権限一式。データベース ユーザーに割り当てることができます。 MySQL 権限 MySQL 5.7 ではロールの管理をサポートしていません。権限を構成するには、GRANT 句を使用して、データベース オブジェクトに対するさまざまなレベル(読み取りや書き込みなど)の権限をユーザーに付与します。
管理 / SYSTEM ユーザー 以下の最高レベルのアクセス権限が割り当てられた Oracle 管理者ユーザー:

SYS
SYSTEM
スーパー ユーザー Cloud SQL for MySQL をデプロイすると、root@'%' ユーザー(任意のホストから接続可能)に加えて、ローカルホストからのみ接続できる mysql.sys という名前のユーザーが設定されます。
ディクショナリ / メタデータ
Oracle では以下のメタデータ テーブルを使用します。

USER_TableName
ALL_TableName
DBA_TableName
ディクショナリ / メタデータ
MySQL ではディクショナリ / メタデータに以下のデータベース / スキーマを使用します。

MYSQL
INFORMATION_SCHEMA
PERFORMANCE_SCHEMA
SYS
これらの各データベースはシステム データベースでもあり、Cloud SQL for MySQL デプロイメントごとに作成されます。
システムの動的ビュー
Oracle の動的ビュー:

V$ViewName
システムの動的ビュー 以下のシステム データベースには MySQL 動的ビューがあります。

INFORMATION_SCHEMA
PERFORMANCE_SCHEMA
SYS
テーブルスペース Oracle データベースのプライマリ論理ストレージ。テーブルスペースごとに 1 つ以上のデータファイルを格納できます。 テーブルスペース Oracle と同様に、MySQL テーブルスペースは論理ユニットですが、(複数のテーブルのデータを保持する)複数のデータファイルを格納できる Oracle のテーブルスペースとは異なり、1 つのテーブルのみを表します。

MySQL では、データファイルを割り当てた新しいテーブルスペースを作成してから、そのテーブルスペースに関連付ける新しいテーブルを作成できます。サイズ設定や上限などのテーブルスペース構成設定は、テーブルスペースの作成時に設定するのはなく、データベース パラメータを使用して設定します。
データファイル データを保持し、特定のテーブルスペースで定義されている Oracle データベースの物理要素です。

データファイルは初期サイズと最大サイズによって定義され、1 つのデータファイルで複数のテーブルのデータを保持できます。

Oracle のデータファイルには .dbf 接尾辞が使用されます(必須ではありません)。
データファイル Cloud SQL for MySQL では値を ON(デフォルト)に設定した innodb_file_per_table パラメータを使用します。この構成により、テーブルごとの新しいデータファイルと専用テーブルスペースが生成されます。

MySQL データファイルには、.ibd(データ)と .frm(メタデータ)ファイルが使用されます。
システム テーブルスペース Oracle データベース全体のデータ ディクショナリ テーブルとビュー オブジェクトを格納します。 システム テーブルスペース Oracle と同じくディクショナリ / メタデータ テーブルを格納します。ibdata1 データファイルが関連付けられた innodb_system テーブルスペース内に保管されます。
一時テーブルスペース セッション中に有効なスキーマ オブジェクトが含まれます。また、サーバーメモリに収まりきらない実行中のオペレーションもサポートします。 一時テーブルスペース 目的は Oracle と同じであり、ibtmp1 データファイルが添付された MySQL innodb_temporary テーブルスペースに格納されます。
Undo
テーブルスペース
特殊なタイプのシステム永続テーブルスペース。自動 UNDO 管理モード(デフォルト)でデータベースを実行中にロールバック オペレーションを管理するために Oracle によって使用されます。 Undo テーブルスペース Oracle と同様に、MySQL の undo テーブルスペースにはロールバックを目的とした undo ログが格納されます。このオプションはデフォルトで OFF に設定されています。また、今後の MySQL リリースでは非推奨になります。
ASM Oracle ASM(Automatic Storage Management)は、高パフォーマンスの統合データベース ファイル システムおよびディスク マネージャーです。ASM が構成された Oracle データベースでは、すべてのストレージ管理が自動的に行われます。 サポート対象外 MySQL では、さまざまなデータ処理の実装を表すストレージ エンジンという用語を使用しますが、Oracle ASM はサポートしていません。Cloud SQL for MySQL では、ストレージの自動増量、パフォーマンス、スケーラビリティなどのさまざまな機能によってストレージ管理を自動化できます。
テーブル / ビュー ユーザーが作成する基本的なデータベース オブジェクト。 テーブル / ビュー Oracle と同じ。
マテリアライズド ビュー 特定の SQL ステートメントを使用して定義します。手動で、または特定の構成に基づいて自動更新できます。 MySQL ではサポート対象外 Oracle のマテリアライズド ビューの代わりに、トリガー / ビューを使用できます。
シーケンス Oracle 固有の値生成ツール。 自動増分 MySQL は Oracle シーケンスをサポートしていません。自動シーケンス生成機能の代替ソリューションとして、AUTO_INCREMENT を使用します。
シノニム 他のデータベース オブジェクトの代替識別子の役割を果たす、Oracle データベース オブジェクト。 サポート対象外 MySQL では Oracle シノニムをサポートしていません。適切な権限が設定されている間はビューを使用できます。
パーティショニング Oracle では、大規模なテーブルを小さい複数のパーティションに分割して管理するためのパーティショニング ソリューションが多数用意されています。 パーティショニング Oracle に比べ、MySQL ではパフォーマンス向上を目的としたパーティショニングのサポートが限られていますが、Oracle パーティションのようなデータ管理とメンテナンスのオペレーションは保持されています。
フラッシュバック データベース Oracle データベースを以前に定義した時間まで初期化するために使用できる Oracle 独自の機能。誤って変更または破損したデータをクエリまたは復元できます。 サポート対象外 別の解決策として、Cloud SQL バックアップとポイントインタイム リカバリを使用して、データベースを以前の状態に復元できます(たとえば、テーブルをドロップする前に復元)。
sqlplus Oracle のコマンドライン インターフェース。データベース インスタンスをクエリして管理できます。 mysql クエリと管理を行うための MySQL と同等のコマンドライン インターフェース。Cloud SQL に対して適切な権限を持つクライアントであれば、どのクライアントからでも接続できます。
PL/SQL ANSI SQL を拡張した Oracle のプロシージャ言語。 MySQL MySQL には異なる構文と実装で独自に拡張したプロシージャ言語があります。この拡張言語には特に名前は付けられていません。
パッケージとパッケージの本文 Oracle 固有の機能。ストアド プロシージャと関数を同じ論理参照にグループ化します。 サポート対象外 MySQL ではグループの割り当てを使用して、ストアド プロシージャと関数を 1 つのオブジェクトにまとめることができます。
ストアド プロシージャと関数 PL/SQL を使用してコードの機能を実装します。 ストアド プロシージャと関数 MySQL では実装されている独自のプロシージャ言語を使用して、ストアド プロシージャと関数を作成できます。
トリガー テーブルに対する DML 実装を制御する Oracle オブジェクト。 トリガー Oracle と同じ。
PFILE / SPFILE Oracle のインスタンス レベルとデータベース レベルのパラメータは、SPFILE というバイナリ ファイルに格納されます(以前のバージョンでは PFILE と呼ばれていました)。パラメータの手動設定用テキスト ファイルとしてこれを使用できます。 Cloud SQL for MySQL データベース フラグ データベース フラグ ユーティリティを使用して、Cloud SQL for MySQL のパラメータを設定または変更できます。MySQL クライアント コマンドライン インターフェース(mysql> SET GLOBAL ... など)を使用して Cloud SQL for MySQL のデータベース パラメータを変更することはできません。これらのパラメータを変更するには、データベース フラグ ユーティリティを使用する必要があります。
SGA / PGA / AMM データベース インスタンスへのメモリ割り当てを制御する、Oracle のメモリ パラメータ。 INNODB_BUFFER_POOL_SIZE MySQL には独自のメモリ パラメータがあります。同等のパラメータは INNODB_BUFFER_POOL_SIZE です。Cloud SQL for MySQL では、このパラメータは選択したインスタンス タイプによって事前定義されています。パラメータ値はタイプに応じて変わります。
結果キャッシュ SQL I/O オペレーションの数を減らすために、バッファ キャッシュから行を取得します。このキャッシュは、データべース パラメータとヒントを使用してセッション レベルで管理できます。 クエリ キャッシュ 基本的な目的は Oracle の結果キャッシュと同じです。このキャッシュは、データベース レベルとセッション レベルで管理できます。
データベース ヒント パフォーマンスを高めるために、オプティマイザーの動作に影響を与える SQL ステートメントの処理方法を制御します。Oracle には 50 を超えるデータベース ヒントがあります。 データベース ヒント Oracle と比較すると、MySQL でサポートされているデータベース ヒントの数は限られています(オプティマイザー ヒントとインデックス ヒント)。MySQL では異なるデータベース ヒント、構文、命名が使用されます。
RMAN Oracle Recovery Manager ユーティリティ。複数の障害復旧シナリオやクローン作成などをサポートする拡張機能を使用して、データベース バックアップを作成できます。 Cloud SQL for MySQL のバックアップ Cloud SQL for MySQL では、オンデマンド バックアップと自動バックアップの 2 つの方法で完全バックアップを適用できます。
データパンプ(EXPDP/IMDP) エクスポート / インポート、データベースのバックアップ(スキーマまたはオブジェクト レベル)、スキーマ メタデータ、スキーマ SQL ファイルの生成など、さまざまな機能に使用できる Oracle ダンプ生成ユーティリティ。

mysqldump/mysqlimport
クライアントとして(リモートで)接続し、ダンプファイル(SQL)を生成できる MySQL ダンプ(エクスポート)ユーティリティ。後で、ダンプファイルを圧縮して Cloud Storage に移動できます。mysqldump ユーティリティの対象はエクスポート ステップのみです。
SQL*Loader テキスト ファイルや CSV ファイルなどの外部ファイルからデータをアップロードできるツール。

mysqlimport/
LOAD FILE INFILE
mysqlimport ユーティリティを使用して、対応する構造のデータベース テーブルにテキスト ファイルや CSV ファイル(Oracle では他のファイル形式もサポートしています)を読み込むことができます。
Data Guard スタンバイ インスタンスを使用した、Oracle の障害復旧ソリューション。ユーザーはスタンバイ インスタンスから読み取りオペレーションを実行できます。 Cloud SQL for MySQL の高可用性とレプリケーション 障害復旧または高可用性を実現するために、Cloud SQL for MySQL ではフェイルオーバー レプリカ アーキテクチャを提供しています。また、(読み取りと書き込みを分離した)読み取り専用オペレーションにはリードレプリカを使用できます。
Active Data Guard/Golden Gate Oracle の主要なレプリケーション ソリューション。スタンバイ(DR)、読み取り専用インスタンス、双方向レプリケーション(マルチソース)、データ ウェアハウジングなど、さまざまな目的で使用できます。 Cloud SQL for MySQL のリードレプリカ Cloud SQL for MySQL のリードレプリカは、読み取りと書き込みを分離したクラスタリングを実装します。現時点では、Golden Gate 双方向レプリケーションのようなマルチソース構成や、異種混合レプリケーションはサポートされていません。
RAC Oracle Real Application Cluster。Oracle 独自のクラスタリング ソリューションであり、1 つのストレージ ユニットで複数のデータベース インスタンスをデプロイして高可用性を確保できます。 サポート対象外 マルチソース アーキテクチャは、Google Cloud の Cloud SQL ではまだサポートされていません。読み取りと書き込みが分離された高可用性クラスタリング アーキテクチャを実現するには、Cloud SQL の高可用性とリードレプリカを使用してください。
Grid / Cloud Control(OEM) データべースおよびその他の関連するサービスをウェブ アプリケーションの形式で管理、モニタリングするための Oracle ソフトウェア。高負荷のワークロードを把握するためにリアルタイムでデータベースを分析する際に非常に便利です。 Cloud SQL for MySQL Console、Cloud Monitoring モニタリングに Cloud SQL for MySQL を使用できます。このコンソールでは、時間とリソースに基づく詳細なグラフも確認できます。また、高度なモニタリング機能を備えた Cloud Monitoring を使用して、特定の MySQL モニタリング指標を保持し、ログ分析を行うこともできます。
REDO ログ 事前に割り当てられた 2 つ(またはそれ以上)の定義済みファイルで構成される Oracle のトランザクション ログ。データが変更されると変更内容が記録されます。REDO ログの目的は、インスタンスに障害が発生した場合にデータベースを保護することです。 REDO ログ MySQL にも REDO ログファイルがあります。これらのファイルは障害復旧時に使用され、不完全なトランザクション REDO ログメカニズムによって書き込まれたデータが修正されます。
アーカイブログ アーカイブログでは、バックアップやレプリケーションのオペレーションなどがサポートされています。各 REDO ログ切り替えオペレーションが完了するたびに、Oracle によってアーカイブログ(有効になっている場合)への書き込みが行われます。 binlog 主にレプリケーション目的で使用される、MySQL のトランザクション ログ保持の実装(Cloud SQL ではデフォルトで有効にされます)。
制御ファイル Oracle の制御ファイルは、データベースに関する情報を保持します。具体的には、データファイルと REDO ログの名前と場所、現在のログシーケンス番号、インスタンス チェックポイントに関する情報などです。 MySQL MySQL アーキテクチャには Oracle で実装しているような制御ファイルは含まれていません。これは、MySQL パラメータと SHOW MASTER STATUS コマンドを使用して現在のバイナリログの位置を確認することで制御されます。
SCN Oracle SCN(システム変更番号)。SCN を使用するとすべての Oracle データベース コンポーネントでデータの整合性を維持できるため、ACID モデルのトランザクションに対応できます。 ログシーケンス番号 データベースの整合性を確保するための MySQL 実装では、LSN(ログシーケンス番号)を使用します。
AWR Oracle AWR(自動ワークロード リポジトリ)は、Oracle データベース インスタンスのパフォーマンスに関する詳細レポートです。これは、パフォーマンスを診断するための DBA ツールとみなされています。

performance_schema
MySQL には、Oracle AWR に相当するレポートはありませんが、performance_schema で収集されたパフォーマンス データが収集されます。別のソリューションとして、MySQL Workbench のパフォーマンス ダッシュボードを使用することもできます。

DBMS_SCHEDULER
事前定義されたオペレーションを設定して実行時間を決めるための Oracle ユーティリティ。

EVENT_SCHEDULER
MySQL データベースの内部スケジューラ機能。デフォルトでは、この機能は OFF に設定されています。
透過的データ暗号化 保存データを保護するために、ディスクに保存されているデータを暗号化します。 Cloud SQL Advanced Encryption Standard Cloud SQL for MySQL では 256 ビットの Advanced Encryption Standard(AES-256)を使用して、保存データだけではなく、転送中のデータもセキュリティで保護します。
Advanced Compression データベースのストレージ フットプリントを改善して、ストレージ コストを削減し、データベースのパフォーマンスを向上させるために、Oracle はデータ(テーブル / インデックス)の高度な圧縮機能として Advanced Compression を提供しています。 InnoDB テーブル圧縮 MySQL では、テーブルの作成時に ROW_FORMAT パラメータを COMPRESSED に設定することで、テーブルを圧縮できます。詳しくは、インデックスの圧縮をご覧ください。
SQL Developer 無料で使用できる Oracle の SQL GUI。SQL ステートメントと PL/SQL ステートメントを管理、実行できます(MySQL でも使用できます)。 MySQL Workbench 無料で使用できる MySQL の SQL GUI。SQL コードと MySQL コードのステートメントを管理、実行できます。
アラートログ 一般的なデータベース オペレーションとエラーが記録される、Oracle のメインログ。 MySQL エラーログ Cloud Logging のログビューアを使用して MySQL エラーログを監視します。
DUAL テーブル 主に SYSDATEUSER などの疑似列の値を取得するために保持される、Oracle の特殊なテーブル。 DUAL テーブル MySQL では、どのテーブルのデータにも依存しない SQL ステートメントで、テーブルに DUAL を指定できます。
外部テーブル Oracle では、データベースの外部にあるファイルのデータをソースとする外部テーブルを作成できます。 サポートされていません。 同等のものはありません。
リスナー 受信データベース接続をリッスンする役割を果たす Oracle ネットワーク プロセス。 Cloud SQL 承認済みネットワーク MySQL は、Cloud SQL の [承認済みネットワーク] 構成ページで許可されると、リモートソースからの接続を受け入れます。
TNSNAMES Oracle のネットワーク構成ファイル。接続エイリアスを使用して接続を確立するためのデータベース アドレスを定義します。 存在しません MySQL は、Cloud SQL インスタンス接続名またはプライベート / パブリック IP アドレスを使用した外部接続を受け入れます。Cloud SQL Proxy を安全なアクセス手段として使用すると、特定の IP アドレスを許可したり SSL を構成したりせずに、Cloud SQL for MySQL(第 2 世代インスタンス)に接続できます。
インスタンスのデフォルト ポート 1521 インスタンスのデフォルト ポート 3306
データベース リンク ローカルやリモートのデータベース オブジェクトを操作するために使用できる、Oracle のスキーマ オブジェクト。 サポート対象外 代わりにアプリケーション コードを使用してリモート データベースに接続し、データを取得します。

Oracle 12c と Cloud SQL for MySQL の用語の違い

Oracle 12c 説明 Cloud SQL for MySQL 主な違い
インスタンス Oracle 11g では 1 つの Oracle インスタンスが取得できるのは 1 つのデータベースのみですが、Oracle 12c ではマルチテナント機能が導入されたため、1 つの Oracle インスタンスが複数のデータベースをプラガブル データベース(PDB)として保持できます。 インスタンス Cloud SQL for MySQL では、さまざまな名前を付けた複数のデータベースを保持して、複数のサービスやアプリケーションに対応できます。
CDB マルチテナント コンテナ データベース(CDB)では 1 つ以上の PDB をサポートでき、(すべての PDB に適用される)ロールなどの CDB グローバル オブジェクトを作成できます。 MySQL インスタンス MySQL インスタンスと Oracle CDB は同等です。どちらも PDB のシステム層を提供します。
PDB PDB(プラガブル データベース)を使用すると、サービスやアプリケーションを互いに分離できます。PDB は移植可能なスキーマ コレクションとして使用できます。 MySQL データベース / スキーマ 1 つの MySQL データベースで、複数のサービスやアプリケーション、多数のデータベース ユーザーに対応できます。
セッション シーケンス Oracle 12c 以降では、シーケンスの作成をセッション レベル(セッション内でのみ固有の値を返します)またはグローバル レベル(一時テーブルを作成する場合など)で行うことができます。 自動
増分
MySQL ではシーケンスがサポートされていませんが、代わりのソリューションとして AUTO_INCREMENT 列プロパティを使用できます。
Identity 列 Oracle 12c の IDENTITY 型を使用すると、シーケンスが生成されてテーブル列に関連付けられます。手動で別個の Sequence オブジェクトを作成する必要はありません。 自動増分 Oracle 12c の Identity 列(自動シーケンス生成機能に代わるソリューション)と同じ機能をシミュレートするには、AUTO_INCREMENT 列プロパティを使用します。
シャーディング Oracle Sharding は、1 つの Oracle データベースを複数の小さいデータベース(シャード)に分割するソリューションです。OLTP 環境のスケーラビリティ、可用性、地理的分散を実現できます。 (機能としては)サポート対象外 MySQL には、シャーディング機能に相当するものはありません。シャーディングを実装するには、(データ プラットフォームとしての)MySQL とサポート アプリケーション層を使用します。
インメモリ データベース Oracle には、OLTP ならびに混合ワークロードに対するデータベース パフォーマンスを改善できる一連の機能が用意されています。 サポート対象外 MySQL に同等の機能はありません。代わりに、Memorystore を使用できます。
リダクション Oracle の高度なセキュリティ機能の 1 つ。リダクションでは、ユーザーやアプリケーションによって機密データが表示されないように列をマスクできます。 サポート対象外 MySQL に同等の機能はありません。

機能

Oracle 11g/12c データベースと Cloud SQL for MySQL データベースはそれぞれ異なるアーキテクチャ(インフラストラクチャと拡張プロシージャ言語)に基づいて機能しますが、どちらもリレーショナル データベースの同じ基本要素を共有しています。データベース オブジェクト、マルチユーザー同時実行ワークロード、トランザクション(ACID 互換性)をサポートしています。また、(ビジネスニーズに基づく)複数の分離レベルをサポートするロック競合も管理し、オンライン トランザクション処理(OLTP)オペレーションとオンライン分析処理(OLAP)に対応するリレーショナル データストアとしての継続的なアプリケーション要件にも対処しています。

次のセクションでは、Oracle と Cloud SQL for MySQL 間のいくつかの主な機能の相違点について説明します。場合によっては、必要に応じて、セクションには詳細な技術的な比較も含まれます。

既存のデータベースの作成と表示

Oracle 11g/12c Cloud SQL for MySQL 5.7
通常、Oracle Database Creation Assistant(DBCA)ユーティリティを使用して、データベースを作成し、既存のものを表示します。手動で作成されたデータベースやインスタンスの場合、追加のパラメータを指定する必要があります。

SQL> CREATE DATABASE ORADB
     USER SYS IDENTIFIED BY password
     USER SYSTEM IDENTIFIED BY password
     EXTENT MANAGEMENT LOCAL
     DEFAULT TEMPORARY TABLESPACE temp
     UNDO TABLESPACE undotbs1
     DEFAULT TABLESPACE users;
次の例のように、CREATE DATABASE Name; という形式のステートメントを使用します。

mysql> CREATE DATABASE MYSQLDB;
Oracle 12c Cloud SQL for MySQL 5.7
Oracle 12c では、コンテナ データベース(CDB)テンプレートから、または既存の PDB から PDB のクローンを作成して、PDB をシードから作成できます。いくつかのパラメータを使用します。


SQL> CREATE PLUGGABLE DATABASE PDB
     ADMIN USER usr IDENTIFIED BY passwd
     ROLES = (dba)
     DEFAULT TABLESPACE sales
     DATAFILE '/disk1/ora/dbs/db/db.dbf'
     SIZE 250M AUTOEXTEND ON
     FILE_NAME_CONVERT =
     ('/disk1/oracle/dbs/pdbseed/',
      '/disk1/oracle/dbs/salespdb/')
      STORAGE (MAXSIZE 2G)
      PATH_PREFIX =
      '/disk1/oracle/dbs/salespdb/';
次の例のように、CREATE DATABASE Name; という形式のステートメントを使用します。

mysql> CREATE DATABASE MYSQLDB;
すべての PDB を一覧表示する:

SQL> SHOW is PDBS;
すべての既存データベースを一覧表示する:

mysql> SHOW DATABASES;
別の PDB に接続する:

SQL> ALTER SESSION SET CONTAINER=pdb;
別のデータベースに接続する:

mysql> use databaseName;
または:

mysql> \u databaseName;
特定の PDB を開く、または閉じる(オープン / 読み取り専用):

SQL> ALTER PLUGGABLE DATABASE pdb CLOSE;
単一のデータベースではサポートされていません。

すべてのデータベースが同じ Cloud SQL for MySQL インスタンスに属しており、起動するかダウンするかのどちらかです。

Cloud SQL コンソールを使用したデータベースの管理

  • Google Cloud コンソールで、[ストレージ] > [SQL] > [インスタンス] > [データベース] > [表示 / 作成] に移動します。

    MySQL データベースを作成または表示するためのコンソール ページ。

システム データベースとスキーマ

Oracle データベース インスタンスは特定のシステム スキーマを取得します(たとえば、データベース メタデータ オブジェクトのオーナーロールが割り当てられた SYS/SYSTEM など)。

一方、MySQL は、Oracle スキーマとは対照的に以下の複数のシステム データベースを保持します。これらのシステム データベースはメタデータ層の役割を果たします(データベース名では大文字と小文字が区別されます)。

  • Mysql

    mysql システム データベースは以下のテーブルを保持します。これらのテーブルには MySQL サーバーの実行時に必要な情報が格納されます。

    • システム権限テーブル
    • オブジェクト情報テーブル
    • ログシステム テーブル
    • レプリケーション システム テーブル
    • オプティマイザー システム テーブル
    • タイムゾーン システム テーブル
  • INFORMATION_SCHEMA

    INFORMATION_SCHEMA は、メインのデータベース データ ディクショナリおよびシステム カタログとして機能します。データベースまたはテーブルの名前、列のデータ型、アクセス権限など、MySQL サーバーに関する内部データベース情報であるデータベース メタデータにアクセスできます。

  • performance_schema

    MySQL インスタンスに関する統計情報を収集するシステム データベース。performance_schema システム データベースは、サーバー実行時のモニタリング指標を非常に詳細なレベルで保持します。スキーマは、実行時にサーバー内部の実行検査を行い、データベースのパフォーマンス問題を分析する際のメインソースとして利用できます。

    Cloud SQL for MySQL を使用する場合、performance_schema はデフォルトで無効になっています。スキーマを有効にするには、gcloud コマンドライン ツールを使用します。

    gcloud sql instances patch INSTANCE_NAME --database-flags performance_schema=on
    

    この構成を完了するには、インスタンスを再起動する必要があります。Google Cloud コンソールの Cloud SQL for MySQL データベース フラグ ページを使用して --database-flags パラメータを変更することはできません。

  • sys

    sys スキーマは MySQL バージョン 5.5.7 で導入されました、主に、performance_schema システム テーブルのビューを保持します。このスキーマは、performance_schema データをよりわかりやすい形式にまとめた、一連の見やすいビューを提供します。sys スキーマは、performance_schema の構成や診断レポートの生成などのオペレーションを実行する複数のストアド プロシージャと関数も保持します。

    sys スキーマは、performance_schema が有効な場合にのみ情報を表示します。

メタデータとシステムの動的ビューの表示

このセクションでは、Oracle で使用される最も一般的なメタデータ テーブルとシステム動的ビューの一部と、Cloud SQL for MySQL バージョン 5.7 の対応するデータベース オブジェクトについて説明します。

Oracle ではシステム メタデータのテーブルとビューを数百種類提供していますが、MySQL には数十種類しかありません。いずれの場合も、特定の目的を果たすデータベース オブジェクトが複数存在する可能性があります。

Oracle のメタデータ オブジェクトには以下の複数のレベルがあり、レベルによって必要な権限が異なります。

  • USER_TableName: ユーザーが表示できます。
  • ALL_TableName: すべてのユーザーが表示できます。
  • DBA_TableName: SYSSYSTEM などの DBA 権限を持つユーザーのみが表示できます。

動的パフォーマンス ビューの場合、Oracle では V$GV$ の接頭辞が使用されます。MySQL ユーザーがシステム メタデータのテーブルやビューを表示するには、システム オブジェクトに対する特定の権限を取得する必要があります。セキュリティの詳細については、セキュリティをご覧ください。

メタデータの種類 Oracle テーブル / ビュー MySQL テーブル / ビュー / 表示(MySQL CMD)
オープン セッション

V$SESSION

SHOW PROCESSLIST
INFORMATION_SCHEMA.PROCESSLIST
performance_schema.threads
実行中のトランザクション

V$TRANSACTION

INFORMATION_SCHEMA.INNODB_TRX
データベース オブジェクト

DBA_OBJECTS
サポートされていません。各オブジェクトをその種類でクエリします
テーブル

DBA_TABLES

INFORMATION_SCHEMA.TABLES
INFORMATION_SCHEMA.INNODB_SYS_TABLES
テーブル列

DBA_TAB_COLUMNS

INFORMATION_SCHEMA.COLUMNS
INFORMATION_SCHEMA.INNODB_SYS_COLUMNS
テーブルと列の権限

TABLE_PRIVILEGES
DBA_COL_PRIVS
ROLE_TAB_PRIVS

INFORMATION_SCHEMA.COLUMN_PRIVILEGES
パーティション

DBA_TAB_PARTITIONS
DBA_TAB_SUBPARTITIONS

INFORMATION_SCHEMA.PARTITIONS
SHOW CREATE TABLE TableName
SHOW TABLE STATUS LIKE 'TableName'
ビュー

DBA_VIEWS

INFORMATION_SCHEMA.VIEWS
制約

DBA_CONSTRAINTS

INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
SHOW CREATE TABLE TableName
インデックス

DBA_INDEXES
DBA_PART_INDEXES

INFORMATION_SCHEMA.STATISTICS
INFORMATION_SCHEMA.INNODB_SYS_INDEXES
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
マテリアライズド ビュー

DBA_MVIEWS
サポート対象外
ストアド プロシージャ

DBA_PROCEDURES

INFORMATION_SCHEMA.ROUTINES
ストアド ファンクション

DBA_PROCEDURES

INFORMATION_SCHEMA.ROUTINES
トリガー

DBA_TRIGGERS

INFORMATION_SCHEMA.TRIGGERS
ユーザー

DBA_USERS

mysql.user
ユーザーの権限

DBA_SYS_PRIVS
DBA_ROLE_PRIVS
SESSION_PRIVS

INFORMATION_SCHEMA.USER_PRIVILEGES
ジョブ /
スケジューラ

DBA_JOBS
DBA_JOBS_RUNNING
DBA_SCHEDULER_JOBS
DBA_SCHEDULER_JOB_LOG

INFORMATION_SCHEMA.EVENTS
テーブルスペース

DBA_TABLESPACES

INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES
データファイル

DBA_DATA_FILES

INFORMATION_SCHEMA.FILES
INFORMATION_SCHEMA.INNODB_SYS_DATAFILES
シノニム

DBA_SYNONYMS
サポート対象外
シーケンス

DBA_SEQUENCES
サポート対象外
データベース リンク

DBA_DB_LINKS
サポート対象外
統計情報

DBA_TAB_STATISTICS
DBA_TAB_COL_STATISTICS
DBA_SQLTUNE_STATISTICS
DBA_CPU_USAGE_STATISTICS

INFORMATION_SCHEMA.STATISTICS
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
SHOW INDEXES FROM TableName
ロック

DBA_LOCK
DBA_DDL_LOCKS
DBA_DML_LOCKS
V$SESSION_BLOCKERS
V$LOCKED_OBJECT

INFORMATION_SCHEMA.INNODB_LOCKS
INFORMATION_SCHEMA.INNODB_LOCK_WAITS
INFORMATION_SCHEMA.INNODB_TRX
performance_schema.metadata_locks
performance_schema.rwlock_instances
SHOW PROCESSLIST
データベース パラメータ

V$PARAMETER
V$NLS_PARAMETERS
SHOW PARAMETER Param

performance_schema.global_variables
performance_schema.session_variables
INFORMATION_SCHEMA.CHARACTER_SETS
SHOW VARIABLES LIKE '%variable%';
セグメント

DBA_SEGMENTS
セグメント表はサポートされていません。各オブジェクトをその種類でクエリします
役割

DBA_ROLES
DBA_ROLE_PRIVS
USER_ROLE_PRIVS

Roles not supported use instead:
information_schema.COLUMN_PRIVILEGES
information_schema.SCHEMA_PRIVILEGES
information_schema.TABLE_PRIVILEGES
information_schema.USER_PRIVILEGES
mysql.columns_priv
mysql.procs_priv
mysql.proxies_priv
mysql.tables_priv
セッション履歴

V$ACTIVE_SESSION_HISTORY
DBA_HIST_*

sys.statement_analysis
performance_schema.events_stages_history
performance_schema.events_stages_history_long
performance_schema.events_statements_history
performance_schema.events_statements_history_long
performance_schema.events_transactions_history
performance_schema.events_transactions_history_long
performance_schema.events_waits_history
performance_schema.events_waits_history_long
バージョン

V$VERSION

sys.version
SHOW VARIABLES LIKE '%version%';
待機イベント

V$WAITCLASSMETRIC
V$WAITCLASSMETRIC_HISTORY
V$WAITSTAT
V$WAIT_CHAINS

performance_schema.events_waits_current
performance_schema.events_waits_history
performance_schema.events_waits_history_long
sys.innodb_lock_waits
sys.io_global_by_wait_by_bytes
sys.io_global_by_wait_by_latency
sys.schema_table_lock_waits
sys.wait_classes_global_by_avg_latency
sys.wait_classes_global_by_latency
sys.waits_by_host_by_latency
sys.waits_by_user_by_latency
sys.waits_global_by_latency
SQL の調整と
分析

V$SQL
V$SQLAREA
V$SESS_IO
V$SYSSTAT
V$STATNAME
V$OSSTAT
V$ACTIVE_SESSION_HISTORY
V$SESSION_WAIT
V$SESSION_WAIT_CLASS
V$SYSTEM_WAIT_CLASS
V$LATCH
V$SYS_OPTIMIZER_ENV
V$SQL_PLAN
V$SQL_PLAN_STATISTICS

performance_schema.events_statements_current
performance_schema.events_statements_history
performance_schema.events_statements_history_long
sys.statement_analysis
sys.host_summary_by_statement_latency
sys.host_summary_by_statement_type
sys.statements_with_errors_or_warnings
sys.statements_with_full_table_scans
sys.statements_with_runtimes_in_95th_percentile
sys.statements_with_sorting
sys.statements_with_temp_tables
sys.user_summary_by_statement_latency
sys.user_summary_by_statement_type
slow-query-log
general-log
SHOW STATUS LIKE '%StatusName%';
インスタンスの
メモリ調整

V$SGA
V$SGASTAT
V$SGAINFO
V$SGA_CURRENT_RESIZE_OPS
V$SGA_RESIZE_OPS
V$SGA_DYNAMIC_COMPONENTS
V$SGA_DYNAMIC_FREE_MEMORY
V$PGASTAT

information_schema.INNODB_CMPMEM_RESET
information_schema.INNODB_CMPMEM
performance_schema.memory_summary_by_account_by_event_name
performance_schema.memory_summary_by_host_by_event_name
performance_schema.memory_summary_by_thread_by_event_name
performance_schema.memory_summary_by_user_by_event_name
performance_schema.memory_summary_global_by_event_name
performance_schema.replication_group_member_stats
performance_schema.replication_group_members
sys.memory_by_host_by_current_bytes
sys.memory_by_thread_by_current_bytes
sys.memory_by_user_by_current_bytes
sys.memory_global_by_current_bytes
sys.memory_global_total

MySQL ストレージ エンジン

他の多くの RDBMS(Oracle を含む)とは異なり、MySQL はプラグイン対応ストレージ システムであるため、ポリモーフィックな形で機能できます。MySQL プラグイン対応ストレージ エンジン アーキテクチャでは、データベース管理者が特定のアプリケーションのニーズに特化したストレージ エンジンを選択できます。

MySQL データベース サーバー内の MySQL プラグイン対応ストレージ エンジン コンポーネントでは、データ I/O オペレーションが行われます。これには、ディスク / メモリバッファへのデータの保存も含まれます。プラグイン対応ストレージ エンジン アーキテクチャは、管理サービスとサポート サービスの標準セットを提供します。これらは、基礎となるすべてのストレージ エンジンで共通です。

MySQL バージョン 5.5 以降のデフォルトのストレージ エンジンは InnoDB ストレージ エンジンです。InnoDB は一時テーブルも処理します。次の例のように、テーブルの CREATE または ALTER の間にストレージ エンジンを構成できます。

mysql> SHOW CREATE TABLE JOBS \G;

次のような出力が表示されます。

*************************** 1. row ***************************
       Table: JOBS
Create Table: CREATE TABLE `JOBS` (
  `JOB_ID` varchar(10) NOT NULL,
  `JOB_TITLE` varchar(35) NOT NULL,
  `MIN_SALARY` decimal(6,0) DEFAULT NULL,
  `MAX_SALARY` decimal(6,0) DEFAULT NULL,
  PRIMARY KEY (`JOB_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

詳細については、MySQL の各種ストレージ エンジンをご覧ください。
ストレージ エンジンの構成を表示するには、次のクエリを使用します。

mysql> SHOW VARIABLES LIKE '%storage%';

出力は次のようになります。

+----------------------------------+--------+
| Variable_name                    | Value  |
+----------------------------------+--------+
| default_storage_engine           | InnoDB |
| default_tmp_storage_engine       | InnoDB |
| disabled_storage_engines         |        |
| enforce_storage_engine           | Innodb |
| internal_tmp_disk_storage_engine | InnoDB |
+----------------------------------+--------+

すべての組み込みストレージ エンジンを表示するには、次のコマンドを実行します。

mysql> SHOW STORAGE ENGINES;

出力は次のようになります。

+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

InnoDB はデフォルトのストレージ エンジンであり、トランザクション(ACID 準拠)をサポートする唯一のストレージ エンジンです。InnoDB は、Oracle の機能に近い唯一のストレージ エンジンであるため、常に InnoDB を使用することをおすすめします。Cloud SQL for MySQL 第 2 世代では、InnoDB ストレージ エンジンのみがサポートされています。

システム パラメータ

Oracle データベースと GCP Cloud SQL for MySQL データベースはどちらも、デフォルトでの構成だけでなく、特定の機能を果たすように明示的に構成できます。Oracle で構成パラメータを変更するには、特定の管理権限が必要です(主に SYS/SYSTEM ユーザー権限)。

以下に、ALTER SYSTEM ステートメントを使用して Oracle の構成を変更する例を示します。この例では、ユーザーは spfile 構成レベルでのみ「ログイン失敗時の最大試行回数」パラメータを変更しています(変更を適用するには、再起動が必要です)。

SQL> ALTER SYSTEM SET SEC_MAX_FAILED_LOGIN_ATTEMPTS=2 SCOPE=spfile;

次の例では、Oracle パラメータ値の表示のみをリクエストしています。

SQL> SHOW PARAMETER SEC_MAX_FAILED_LOGIN_ATTEMPTS;

出力は次のようになります。

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sec_max_failed_login_attempts        integer     2

Oracle パラメータの変更は、次の 3 つのスコープで適用されます。

  • SPFILE: パラメータの変更は Oracle spfile にのみ書き込まれ、パラメータを有効にするにはインスタンスの再起動が必要です。
  • MEMORY: パラメータの変更はメモリ層にのみ適用されます。ただし、静的パラメータの変更は許可されません。
  • BOTH: パラメータの変更はサーバー パラメータ ファイルとインスタンス メモリの両方に適用されます。ただし、静的パラメータの変更は許可されません。

Cloud SQL for MySQL 構成フラグ

Cloud SQL for MySQL のシステム パラメータを変更するには、Google Cloud コンソールの構成フラグ、gcloud CLI、または CURL を使用します。Cloud SQL for MySQL でサポートされている変更可能なすべてのパラメータの全リストをご覧ください。

MySQL のパラメータは次のスコープに分類されます。

  • 動的パラメータ: 実行時に変更できます。
  • 静的パラメータ: 適用するにはインスタンスの再起動が必要です。
  • グローバル パラメータ: 現在と将来のすべてのセッションに適用されます。
  • セッション パラメータ: 現在のセッションの存続期間中に限り、他のセッションとは独立してセッション レベルで変更できます。

Cloud SQL for MySQL のメモリ パラメータ innodb_buffer_pool_size(MySQL 環境の計画とサイズ設定で考慮すべき重要なパラメータの 1 つ)は、インスタンスのタイプによって決定されます。構成フラグや次のようなその他の方法で変更することはできません。

  • インスタンス タイプ db-n1-standard-1 のメモリ割り当ては 1.4 GB です。
  • インスタンス タイプ db-n1-highmem-8 のメモリ割り当ては 38 GB です。

Cloud SQL for MySQL パラメータを変更する例

コンソール

Google Cloud コンソールを使用して、event_scheduler パラメータを有効にします。

  1. Cloud Storage の [インスタンスの編集] ページに移動します。

    [インスタンスの編集] に移動

  2. 次のスクリーンショットのように、[フラグ] で [項目を追加] をクリックし、event_scheduler を検索します。

    コンソールでイベント スケジューラ インスタンスを編集します。

gcloud

  • gcloud CLI を使用して、event_scheduler パラメータを有効にします。

    gcloud sql instances patch INSTANCE_NAME \
        --database-flags event_scheduler=on
    

    次のような出力が表示されます。

    WARNING: This patch modifies database flag values, which may require
    your instance to be restarted. Check the list of supported flags -
    /sql/docs/mysql/flags - to see if your
    instance will be restarted when this patch is submitted.
    
    Do you want to continue (Y/n)?
    

MySQL セッション

セッション レベルで AUTOCOMMIT モードを無効にします。この変更は現在のセッションにのみ適用され、セッションの存続期間中にのみ有効になります。

  1. autocommit のような変数を表示します:

    mysql> SHOW VARIABLES LIKE '%autoc%';
    

    次の出力が表示されます。autocommitON です。

    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | autocommit    | ON    |
    +---------------+-------+
    
  2. autocommit を無効にします:

    mysql> SET autocommit=off;
    
  3. autocommit のような変数を表示します:

    mysql> SHOW VARIABLES LIKE '%autoc%';
    

    次の出力が表示されます。autocommitOFF です。

    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | autocommit    | OFF   |
    +---------------+-------+
    

トランザクションと分離レベル

このセクションでは、トランザクション レベルと分離レベルの移行に関連する Oracle と Cloud SQL for MySQL の主な違いについて説明します。

Commit モード

Oracle はデフォルトで非自動 commit モードで動作します。各 DML トランザクションは COMMIT/ROLLBACK ステートメントで確定される必要があります。Oracle と MySQL の基本的な相違の 1 つは、MySQL はデフォルトで自動 commit モードで動作し、各 DML トランザクションは COMMIT/ROLLBACK ステートメントを明示的に指定して自動 commit されることです。

次の複数の方法で、MySQL を非自動 commit モードで動作させることができます。

  • ストアド プロシージャのスコープ内でトランザクションを管理している場合は、START TRANSACTION 句を使用して Oracle と同じトランザクション モードを開始します。
  • 次のステートメントを使用して、セッション レベルで autocommit システム パラメータを OFF に設定し、DML トランザクションで COMMIT/ROLLBACK ステートメントを明示的に使用します。

    mysql> SET autocommit=off;
    

分離レベル

ANSI / ISO SQL 標準(SQL92)では、4 つの分離レベルを定義しています。レベルによって、データベース トランザクションの同時実行を処理する方法が異なります。

  • Read Uncommitted: 現在処理されているトランザクションで、他のトランザクションで確定されていないデータを参照できます。ロールバックが実行されると、すべてのデータが以前の状態に復元されます。
  • Read Committed: トランザクションの実行中に参照できるのは、確定されたデータの変更のみです。確定されていないデータの変更は(「ダーティリード」)は参照できません。
  • Repeatable Read: あるトランザクションの実行中に、他のトランザクションで行われた変更を参照できるのは、両方のトランザクションが COMMIT を発行した後、あるいは両方のトランザクションがロールバックされた後に限られます。
  • Serializable: 最も厳格かつ強力な分離レベルです。このレベルでは、アクセスされたすべてのレコードがロックされ、レコードがテーブルに追加されないようにリソースがロックされます。

トランザクションの分離レベルにより、実行中の他のトランザクションに対する変更データの可視性が管理されます。また、複数の同時実行トランザクションで同じデータにアクセスする際にそれぞれのトランザクションがどのように相互作用するかも、選択した分離レベルによって異なります。

Oracle でサポートされている分離レベル

  • Read Committed(デフォルト)
  • Serializable
  • Read-Only(ANSI/ISO SQL 標準(SQL92)には含まれていません)

Oracle MVCC(マルチバージョン同時実行制御)

  • Oracle では MVCC メカニズムを使用して、データベース全体とすべてのセッションで自動読み取りの整合性を確保しています。
  • Oracle は現在のトランザクションのシステム変更番号(SCN)を使用してデータベース ビューの整合性を確保します。したがって、すべてのデータベース クエリは、クエリが実行された時点で SCN に関して commit されているデータのみを返します。
  • 分離レベルは、トランザクション レベルとセッション レベルで変更できます。

分離レベルの設定例を次に示します。

-- Transaction Level
SQL> SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SQL> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SQL> SET TRANSACTION READ ONLY;

-- Session Level
SQL> ALTER SESSION SET ISOLATION_LEVEL = SERIALIZABLE;
SQL> ALTER SESSION SET ISOLATION_LEVEL = READ COMMITTED;

Cloud SQL for MySQL は、Oracle と同様に、ANSI SQL:92 標準で指定されている次の 4 つのトランザクション分離レベルをサポートしています。

  • READ UNCOMMITTED
  • READ COMMITTED
  • REPEATABLE READ (default)
  • SERIALIZABLE

Cloud SQL for MySQL のデフォルトの分離レベルは REPEATABLE READ です。新しいデータは、両方のトランザクションが COMMIT コマンドを発行した後にのみ、両方で使用できます。これらの分離レベルは、SESSION レベルと GLOBAL レベルで変更できます(グローバル レベルの変更は現在、構成フラグを使用するベータ段階です)。

現在の分離レベルを SESSION レベルと GLOBAL レベルの両方で検証するには、次のステートメントを使用します。

mysql> SELECT @@GLOBAL.tx_isolation, @@tx_isolation;

次のような出力が表示されます。

+-----------------------+-----------------+
| @@GLOBAL.tx_isolation | @@tx_isolation  |
+-----------------------+-----------------+
| REPEATABLE-READ       | REPEATABLE-READ |
+-----------------------+-----------------+

分離レベルの構文は次のように変更できます。

SET [SESSION] TRANSACTION ISOLATION LEVEL [READ WRITE | READ ONLY]
| REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE]

分離レベルは SESSION レベルで変更できます。

mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

       -- Verify

mysql> SELECT @@GLOBAL.tx_isolation, @@tx_isolation;

次のような出力が表示されます。

+-----------------------+------------------+
| @@GLOBAL.tx_isolation | @@tx_isolation   |
+-----------------------+------------------+
| REPEATABLE-READ       | READ-UNCOMMITTED |
+-----------------------+------------------+

Cloud SQL for MySQL のトランザクション構造

トランザクションの構文:


START TRANSACTION
    [transaction_characteristic [, transaction_characteristic] ...]

transaction_characteristic: { WITH CONSISTENT SNAPSHOT | READ WRITE | READ ONLY }
BEGIN [WORK] COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE] ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE] SET autocommit = {0 | 1}

トランザクションは START TRANSACTION または BEGIN で実装できます。

WITH CONSISTENT SNAPSHOT オプションにより、整合性のある READ トランザクションが開始されます。このオプションは実質的に、SELECT の後に任意のテーブルからの START TRANSACTION を実行することと同じです。整合性のある READ(スナップショット情報を使用して、その時点でのクエリ結果を表す READ オペレーション)を開始する WITH CONSISTENT SNAPSHOT 句によって、トランザクションの分離レベルが変更されることはありません。この句は、REPEATABLE READ 分離レベルでのみサポートされます。

整合性のある READ では、同時実行トランザクションによって行われた変更とは関係なく、スナップショット情報を使用して、その時点でのクエリ結果を使用可能にします。クエリ対象のデータが別のトランザクションによって変更されている場合、undo ログを使用して元のデータが再現されます。これは、同時実行性を損なう可能性のあるロックの問題を回避するのに役立ちます。

REPEATABLE READ 分離レベルでは、スナップショットは最初の READ オペレーションが実行された時点に基づきます。READ COMMITTED 分離レベルでは、スナップショットはそれぞれの READ オペレーションの時点にリセットされます。

トランザクションと分離レベルの設定の例を次に示します。

mysql> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
mysql> START TRANSACTION;
mysql> INSERT INTO tbl1 VALUES (1, 'A');
mysql> UPDATE tbl2 SET col1 = 'Done' WHERE KeyColumn = 1;
mysql> COMMIT;