公開されているHekatonにアクセスできる方もいらっしゃいます AdventureWorksを含むインメモリOLTPデモスクリプト。最新のサンプルはここに公開されています。これらの例は、CodePlexのAdventureWorks2012サンプルデータベースに便乗しています。これらのサンプルを試した場合、このテクノロジーの最初の経験を劇的に変える可能性のあるいくつかの問題に遭遇した可能性があります。
データベース認証
多くの人が「AdventureWorks2012データファイル」をダウンロードします。これは、次の構文を使用して、ログなしで添付できる200MBの.mdfファイルです。
CREATE DATABASE AdventureWorks2012 ON ( NAME = AdventureWorks2012_Data, FILENAME = '<path>\AdventureWorks2012_Data.mdf' ) FOR ATTACH_REBUILD_LOG;
問題は、WindowsアカウントとしてSQL Serverインスタンスに接続している場合、誤ってデータベース所有者になってしまう可能性があることです。 EXECUTE AS OWNER
を使用してストアドプロシージャを作成する場合を除いて、これはほとんどのシナリオで大したことにはなりません。 、あなたが出くわす多くのサンプルがするように、これは問題を引き起こす可能性があります。この行は、たとえば、ネイティブにコンパイルされた多くのストアドプロシージャにあります。
WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
他の方法でこの問題をすでに軽減していない限り、データベースの所有者がWindowsアカウントである場合、そのような手順を作成しようとすると、次のエラーが発生する可能性があります。
メッセージ15517、レベル16、状態1、プロシージャ[プロシージャ名]プリンシパル「dbo」が存在しないか、このタイプのプリンシパルを偽装できないか、権限がないため、データベースプリンシパルとして実行できません。
環境によっては、これにどのように対処するかを真剣に検討することをお勧めします。私の場合、簡単な方法でデータベースの認証をsa
に設定しました。 :
ALTER AUTHORIZATION ON DATABASE::AdventureWorks2012 TO sa;
この時点で、問題なくデモスクリプトを実行できました(メモリが最適化された別のファイルグループを追加しようとするとエラーが発生しましたが、これはまったく別の無視できる問題です)。
バケット数
メモリ最適化テーブルのバケット数を選択する方法については、実用的なガイダンスがたくさんないようです。この記事はMSDNにあり、技術的な詳細がいくつか説明されています。KlausAschenbrennerは、この分野で賢明な選択を行うことについてこの投稿を書いています。それ以外では、あなたはほとんど自分で実験する必要があります。私が最もよく耳にするSWAGは、一意のキー値の1倍から2倍の数であるため、ポイントルックアップが最も効率的です。ただし、そこにあるサンプルの中には、一貫して1,000,000個のバケットを使用するか、100個(場合によっては5個)のような小さい数を使用するか、または組み合わせて使用するものがあります。独自のスキーマとデータアクセスパターンの実験を開始するときは、このことを念頭に置いてください。シナリオの「スイートスポット」を見つけるために、テーブルを分解してさまざまなバケットサイズで再試行する必要がある場合があります。
リカバリーモデル
AdventureWorks2012データベースはSIMPLE
に設定されています 回復。データベース所有者の問題と同様に、ほとんどの場合、これはサンプルデータベースにとってそれほど大きな問題ではありません。ただし、インメモリOLTPをテストしている場合は、SIMPLE
を作成する他のテクノロジーと組み合わせて使用する可能性があります。 可用性グループのような契約破りのリカバリ–リカバリがFULL
に設定されているデータベースに対してテストを実行する方がはるかに理にかなっている場合があります 。そうしないと、異なるリカバリモデルでは異なる可能性のある特定の動作を観察できない可能性があります。 AdventureWorks2012をFULL
に変更できます 次のように:
ALTER DATABASE AdventureWorks2012 SET RECOVERY FULL;
また、完全バックアップを取ることを忘れないでください。これにより、バックアップチェーンが確立され、データベースが疑似SIMPLE
で動作しなくなります。 リカバリモード。