この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 1141|答える: 1

[出典] SQL SERVERデータベース用のメモリ最適化テーブル

[リンクをコピー]
2025年5月10日 21:28:18に投稿 | | | |
メモリ最適化テーブルの紹介

メモリ最適化テーブルとは、CREATE TABLE(Transact-SQL)を用いて作成されるテーブルのことです。

デフォルトでは、メモリ最適化されたテーブルは完全に永続的です。 (従来の)ディスクベースのテーブルでのトランザクションと同様に、メモリ最適化テーブル上のトランザクションは完全に原子的で整合性があり、孤立的かつ永続的(ACID)です。 メモリ最適化されたテーブルやネイティブにコンパイルされたストアドプロシージャは、Transact-SQLの機能の一部のみをサポートしています。

SQL Server 2016以降、Azure SQL Databaseでは、メモリ内のOLTP固有のコレーションやコードページに制限はありません。

メモリ最適化テーブルのプライマリメモリはプライマリメモリです。 テーブルから行をメモリから読み出し、その行をメモリに書き込みます。 テーブルデータのもう一つのコピーはディスクに保存されますが、これは永続性の目的でのみ維持されます。 永続テーブルの詳細については、「メモリ最適化のためのオブジェクトのストレージを作成および管理」をご覧ください。 メモリ最適化テーブル内のデータは、データベース復旧時(例えばサーバー再起動後)にのみディスクから読み込みます。

より大きな性能向上のために、インメモリOLTPはトランザクションの永続的な遅延を持つ永続テーブルをサポートしています。 遅延した永続トランザクションは、トランザクションがコミットされた直後にディスクに保存され、制御権がクライアントに戻されます。 性能向上の見返りとして、サーバーのクラッシュやフェイルオーバー時にディスクに保存されないコミット済みトランザクションは失われます。

デフォルトの永続メモリ最適化テーブルに加え、SQL Serverは記録されていない非永続メモリ最適化テーブルをサポートしており、それらのデータはディスク上に永続化されません。 つまり、これらのテーブル上のトランザクションはディスクIOを必要としませんが、サーバー障害やフェイルオーバーが発生した場合にはデータが失われます。

インメモリOLTPはSQL Serverと統合され、開発、展開、管理性、サポート性などあらゆる側面でシームレスな体験を提供します。 データベースは、インメモリオブジェクトとディスクベースのオブジェクトの両方を含みます。

メモリ最適化テーブルの行はバージョン管理されています。 つまり、テーブルの各行に複数のバージョンが存在することが可能です。 すべての行バージョンは同じテーブルデータ構造内で管理されます。 行のバージョン管理は、同じ行への同時読み書きを可能にするために使われます。 同じ行への同時読み書きについての詳細は、「メモリ最適化テーブル内の事柄」を参照してください。

おおよその手順と使用制限

ステップス:

(1) データベースを作成し、ファイルグループMEMORY_OPTIMIZED_DATA(データベースを変更・追加ファイルグループ、各データベースはMEMORY_OPTIMIZED_DATAファイルグループは1つしか持てません!!) )
(2) ファイルグループにデータファイルを保存するフォルダを追加する(事前にこのフォルダを作成せず、ファイルグループに Add File() を使ってください。
(3) 永続的/非永続的メモリ最適化テーブルの作成(SQL Server 2014はデフォルトで永続化されます)。また、集約されていないハッシュインデックスに基づくプライマリキーも定義しなければなりません。 ハッシュインデックスはメモリ最適化テーブルで唯一サポートされているインデックスタイプです。
(4) ローカルでコンパイルされたストアドプロシージャを使用する:メモリ最適化テーブルは、メモリ最適化されたテーブルのみを参照するストアドプロシージャであれば、ローカルでコンパイルされたストアドプロシージャをサポートします。

極限:

(1) メモリ最適化テーブルはデータベースの下にCONTAINS MEMORY_OPTIMIZED_DATAファイルグループを配置しなければなりません。
(2) メモリ最適化テーブルは、集計されていないハッシュインデックスに基づいてプライマリキーを定義し、テーブルも定義されなければなりません外部キーや制約チェックはサポートされていません
(3) メモリ最適化テーブルには十分なメモリが必要でなければならず、そうでなければ更新の挿入などの操作が失敗します。
(4) SQL Server 2014にはこれらのテーブルに多くの制限があります。 例えば、外部キーや制約チェック(MySQLのメモリストレージエンジンに似ている感じ)をサポートしていません。彼らはIDENTITYフィールドやDMLトリガーもサポートされていません

チュートリアルを活用してください

データベースのバージョンは以下の通りです:

Microsoft SQL Server 2022 (RTM-CU15-GDR) (KB5046059) - 16.0.4150.1 (X64)
        2024年9月25日 17:34:41
        著作権 (C) 2022 Microsoft Corporation
        エンタープライズエディション:Linux(Ubuntu 22.04.4 LTS)でのコアベースのライセンス(64ビット) <X64>

まず、以下のコマンドでデータベースとファイルグループを作成します。

メモリ最適化グループを作成していない場合、メモリ最適化テーブルを作成する際にエラーが報告されます:メモリ最適化されたテーブルを作成できません。 メモリ最適化されたテーブルを作成するには、データベースがオンラインのMEMORY_OPTIMIZED_FILEGROUPを持ち、少なくとも1つのコンテナを持つ必要があります.

次のコマンドで、テスト用のメモリ最適化テーブルを2つ作成します。1つは永続的テーブル、もう1つは非永続テーブルです。

メモリ最適化テーブルには2つのオプションがあります(DURABILITY = SCHEMA_AND_DATA)、(DURABILITY = SCHEMA_ONLY)
耐久性表:耐久性 =SCHEMA_AND_DATA
非永続テーブル:耐久性 =SCHEMA_ONLY

テストはメモリ最適化テーブルに別々に挿入されます10万件の記事(実際には100002項目)データの場合、コマンドは以下の通りです:





永続化は起動に28秒、持続性なしでは1秒かかります

参考:

ハイパーリンクのログインが見えます。
ハイパーリンクのログインが見えます。
ハイパーリンクのログインが見えます。
ハイパーリンクのログインが見えます。
ハイパーリンクのログインが見えます。




先の:ノートパソコンの品質検査ソフトウェアのリサイクルが大好きです
次に:C# 8.0の構文はインデックスとレンジを使用します
 地主| 2025年5月10日 21:36:40に投稿 |
通常のテーブルは10万件のデータを挿入し、実行に18秒かかります。 以下に示すように:



スクリプト:
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com