タグ付けされた質問 「sql-server」

Microsoft SQL Serverのすべてのバージョン(MySQL以外)。sql-server-2016のようなバージョン固有のタグも追加してください。これは、質問に関連することが多いためです。

4
CPUがアイドル状態の場合にのみ、サーバーエージェントジョブをスケジュールどおりに実行する
SQL Serverエージェントで更新クエリを実行するようにジョブを設定しています。このジョブを毎晩真夜中から午前5時まで実行し、その時間枠内で5分ごとに繰り返すようにしたい。ただし、CPUがアイドル状態の場合、つまり、CPU使用率が20%を下回っている場合にのみ、ジョブを実際に実行する必要があります。スケジュールを設定できることはわかっていますが、CPUアイドル要件を個別に設定することもできます。ジョブを実行するために両方の「スケジュール」がtrueでなければならないように設定する方法はありますか? ありがとう

3
SQL Server Management Studioのタイトルにテーブル名を表示する
SQL Server Management Studioでタイトルにテーブル名を表示する方法を知っている人はいますか?現在、それらは役に立たないものの隣にあり、テーブルを見る必要があるたびに、テーブルを再度開く必要があります。 古き良き時代には、Enterprise Managerを使用していましたが、それははるかに便利でした。 ここにBrent Ozarsの記事を見つけました。Options ...の対応するエントリはそこには何の役にも立たないようです。おそらくサードパーティ製品ですか?

3
「接続が閉じてプールに戻されると、最後のSET TRANSACTION ISOLATION LEVELステートメントからの分離レベルが保持されます」?
MSDNオンライン記事「SQL Serverのスナップショット分離」には、次のように記載されています。 「分離レベルには接続全体のスコープがあり、SET TRANSACTION ISOLATION LEVELステートメントを使用して接続に設定されると、接続が閉じられるか、別の分離レベルが設定されるまで有効です。接続が閉じられ、プールに戻されるとき、最後のSET TRANSACTION ISOLATION LEVELステートメントからの分離レベルが保持されます。プールされた接続を再利用する後続の接続では、接続がプールされたときに有効だった分離レベルが使用されます。 自己矛盾する段落ではありませんか(「まで」と「保持」)。 次に、接続を閉じてプールに戻した後、「最後のSET TRANSACTION ISOLATION LEVELステートメントからの分離レベルが保持されている」場合、それをどのように理解する必要がありますか。 デフォルトの分離レベルは任意の値になります(プール内の異なる接続には異なる分離レベルがあり、その値は再オープンされる接続に依存します)? または、プール内のすべての接続のすべてのデフォルト値が最後の値に変更されますか?しかし、手に入る前にまた全く未知ですか?

5
すべてのデータベースのすべてのテーブルのテーブルサイズを一覧表示する
MSSQLサーバー上のすべてのデータベースのすべてのテーブルのサイズを一覧表示する簡単な方法はありますか? 1つのデータベースの結果を取得するためにsys.tablesでクエリを使用しましたが、サーバーごとに100を超えるデータベースがあるため、同じ結果を取得する方法はすべてのデータベースに対して素晴らしいでしょう。 現在、master.sys.databasesからデータベースの一時リストを作成し、それをカーソルで反復処理して、クエリを作成し、結果を一時テーブルにで挿入する必要がありますEXEC sp_executeSQL @SQLString。

3
MySQLリンクサーバーをSQL Serverに追加するにはどうすればよいですか?
SQL Server上のリンクサーバーをMySQLサーバーに追加しようとしています。 SQL Serverは、異なるドメイン名を持つ別のマシンにインストールされていることに注意してください。 SQL Serverは10.0.1.1old_domain.comにあります。 MySQLサーバーは10.0.1.2new_domain.comにあります。 サーバーにODBCデータソースを追加し10.0.1.1、接続をテストしましたが、問題は報告されていません。 次に、Microsoft SQL Server Management Studioを開いてに移動しましたSQL SERVER > Server Object > Linked Servers。 リンクサーバーを追加するためのウィザードが表示され、次のように構成しました。 リンクサーバー:「MySQLNewServer」 「その他のデータソース」プロバイダー「Microsoft OLE DBプロバイダーfor ODBC」を選択しました製品名「MySQLへの接続」データソース「MySQL」は、最初のステップで追加したデータソースと同じ名前です。 [セキュリティ]タブで[このセキュリティコンテキストを使用して作成する]を選択し、SQL Serverユーザー名とSQL Serverパスワードを入力しました 「OK」を押します 注:私はこのリンクhttp://dbperf.wordpress.com/2010/07/22/link-mysql-to-ms-sql-server2008/の指示に従いました しかし、私はこのエラーを受け取ります: リンクサーバー「MySQLNewServer」のOLE DBプロバイダー「MSDASQL」がメッセージ「[MySQL] [ODBC 5.2(w)Driver]を返しました。10.0.1.1上のMySQLサーバーに接続できません(10055)Microsoft SQL Serverエラー:7303。 誰かが私が間違っていることを教えてもらえますか?これらの2つのサーバーを通信させるにはどうすればよいですか?

1
UserDB選択の特定のTempDB挿入により、SOS_SCHEDULER_YIELDからENCRYPTION_SCANが返されます。
実稼働システムの1つで、ユーザーデータベースから一時テーブルへの1つの挿入ステートメントに問題が発生しています。挿入/選択をコメントアウトすると、問題のストアドプロシージャがタイムリーに実行されるため、問題の切り分けに自信があります。 問題の挿入/選択のコメントを解除すると、呼び出された一連のストアドプロシージャが基本的に停止して停止します。tempdbやユーザーデータベースで、年齢別の上位トランザクションに何も表示されません。データベースが「静止」しているときに、アクティビティモニターの情報から逸脱するアクティビティモニターに何も表示されません。ただし、CPUは約20%で平坦化されます。 動作は次のとおりです。再生ケースをセットアップして実行すると、問題の挿入/選択に到達すると、SOS_SCHEDULER_YIELDが表示され、ENCRYPTION_SCANが表示されます。約5時間後、ストアドプロシージャの処理が再開され、アクティビティが完了します(すべての個別の操作の周りに、迅速でダーティなログステートメントを配置します)。 また、挿入の選択部分の変数を実行時の値に置き換え、選択クエリ自体を実行したところ、5秒で戻りました。 問題のユーザーデータベースは、tempdbと同様に、暗号化が有効な値としてFALSEを持っています。問題の操作は約6万5千行のデータで発生し、1千行のみで試したところ、動作は持続しましたが、所要時間ははるかに短かったです。 シングルユーザーデータベースは、この動作の唯一のインスタンスです。そのユーザーデータベースのバックアップを介してローカルで再現しました。この問題を示さないソフトウェアのユーザーが約70人います。 上記の情報を踏まえて、私の質問は、ストアドプロシージャの処理が停止するのはなぜですか?正確な答えを期待することはおそらく楽観的であるため、これをデバッグするための正しい手順は何ですか?おそらく、dm_tran_locks、dm_exec_requests、dm_tran_database_transactions、dm_os_schedulers、dm_exec_sessionsなどのDMVの1つに何かがあり、それらは私にいくつかの情報を提供しましたが、解決策を指すような方法で出力を解釈または理解していません。 以下は問題の挿入/選択です: INSERT INTO #TS_EVENT_DATA ( EVENT_FK, EVENT_TYPE_CR_FK, EVENT_ENTITY_CLASS_CR_FK, userDatabase_ID, DATA_NAME_FK, IMPORT_JOB_FK, PRODUCT_STRUCTURE_FK, ORG_ENTITY_STRUCTURE_FK, ENTITY_CLASS_CR_FK, ENTITY_DATA_NAME_FK, ENTITY_STRUCTURE_FK, DATA_SET_FK, DATA_TYPE_CR_FK, ORG_IND, TABLE_NAME, NET_VALUE1_NEW, NET_VALUE2_NEW, NET_VALUE3_NEW, NET_VALUE4_NEW, NET_VALUE5_NEW, NET_VALUE6_NEW, NET_VALUE1_CUR, NET_VALUE2_CUR, NET_VALUE3_CUR, NET_VALUE4_CUR, NET_VALUE5_CUR, NET_VALUE6_CUR, PERCENT_CHANGE1, PERCENT_CHANGE2, PERCENT_CHANGE3, PERCENT_CHANGE4, PERCENT_CHANGE5, PERCENT_CHANGE6, VALUE_UOM_CODE_FK, ASSOC_UOM_CODE_FK, VALUES_SHEET_NAME, UOM_CONVERSION_FACTOR, END_DATE_CUR, …

2
大きな初期サイズで新しいデータベースを作成する
200 GBのデータファイル(.mdf)と50 GBのログファイル(.ldf)を使用して新しいデータベースを作成します。 しかし、それは非常に遅いです(それは約15分ですが、まだ作成されていません)。そしてそれは非常に時間がかかります。それは正常ですか?はいの場合、それは何をするのに時間がかかりますか?作成速度を上げることはできますか? SQL Server 2008 R2、Windows Server 2008R2、16 GB RAM(ssmsでは12 GBに制限した)、およびCore i7 Cpuを使用しています

1
SQL Server-たとえば、理想的なメモリを決定する方法
Xメモリが割り当てられている仮想マシンがいくつかあります。このメモリ量はややランダムです。これは、物理マシンが持っていたメモリの量、ベンダーの推奨、またはインスタンスに必要なメモリの量について推測した結果、マシンに割り当てられました。 私はメモリが多いほど良いと理解していますが、必要でないときにVMにメモリを過剰に割り当てないようにしたいと思います。メモリは別のマシンでより適切に利用できます。 実際にアクティブで使用されているインスタンスごとの理想的なメモリ量を決定する最良の方法は何ですか?ページの平均余命に加えて、注意すべき他のカウンターはありますか?10k +のPLEを持つインスタンスと、100k +を持つ他のインスタンスがあります。 どんな洞察も大歓迎です。ありがとう、サム

2
クラスタ化インデックスの圧縮とテーブルの圧縮-それらは同じものですか?
テーブルのクラスター化インデックスに圧縮(ページまたは行)を設定した場合、それはテーブルに圧縮を設定することと同じですか? SQL Serverは両方を実行するためのオプションを提供しますが、それらは異なることを示唆していますが、クラスター化インデックスとテーブルは基本的に同じものであるという印象を受けました。クラスター化インデックスの動作のメンタルモデルは、クラスター化インデックスを圧縮するテーブルも圧縮する必要があります。

2
MAXを使用したGROUP BY対MAXのみ
私はプログラマーで、次のような大きなテーブルを扱っています。 UpdateTime, PK, datetime, notnull Name, PK, char(14), notnull TheData, float にクラスター化インデックスがあります Name, UpdateTime 私は何が速くなるべきか疑問に思っていました: SELECT MAX(UpdateTime) FROM [MyTable] または SELECT MAX([UpdateTime]) AS value from ( SELECT [UpdateTime] FROM [MyTable] group by [UpdateTime] ) as t このテーブルへの挿入は、同じ日付の 50,000行のチャンクです。したがって、グループ化することでMAX計算が容易になると考えました。 最大150,000行を見つけようとする代わりに、3行にグループ化すると、計算MAXが速くなりますか?私の仮定は正しいですか、グループ化もコストがかかりますか?

3
共有ログインを使用しているときに、監査テーブルで削除アクションを実行しているユーザーを知る方法は?
背景情報: アプリの一連のデータテーブルに対する更新と削除を追跡するために、監査テーブルのコレクションを作成しています。 監査レコードはトリガーを介して作成されます。 アプリのデータベースのDMLは通常、サービスがデータベースにアクセスするために使用するログインから取得されます。このためSYSTEM_USER、トリガーで呼び出されたときの結果は常に同じになると思います。 私のアプリは現在ユーザーデータを保存していませんが、UserIdDMLが実行されるたびに文字列が与えられます(ストアドプロシージャでのみ行われます)。 私が遭遇した問題は、ユーザーがレコードを削除するときに、誰がそれをしたのか知りたいということです。同じログインによって行われるため、すべてのアクションがサービスによって行われたことを確認したくありません。どのユーザーがそれを実行したかを確認したいと思います。ModifiedBy更新の送信で更新される列があるため、これは更新の問題ではありませんUserId。 問題はSYSTEM_USER、削除が実行されたときに、ユーザー情報をトリガーに設定する方法、またはトリガーに取得する方法はありますか? 私が現在持っている「最高の」アイデアは、それが良いアイデアかどうかはまだわかりませんが、サービスで、現在のものUserIdがデータベースとしてユーザーに存在するかどうかを確認し、そうでない場合はユーザーを作成することです彼らのためのオブジェクト。次に、でストアドプロシージャを実行しEXECUTE AS User = @UserIdます。次に、ストアドプロシージャでDMLが実行され、トリガーが起動すると、SYSTEM_USERからユーザーを返す必要がありEXECUTE ASます。

3
トレースフラグとオフにする必要がある理由と理由
SQLサーバーには非常に多くのトレースフラグがあります。それらのいくつかをオフにする必要がある理由。トレースフラグ8017をオフにする必要があることを確認した場所もあります。それで、どのトレースフラグをオフにする必要があるのか​​、なぜ知りたいのですか?

2
インスタントファイル初期化を有効にして作成されたSQL Serverデータベースファイルを「クリーンアップ」しますか?
SQL Serverでインスタントファイル初期化を有効にしているので、データベースファイルの「空の」部分は、割り当てられる前にゼロ化されません。私の理解では、これはファイルに「削除された」データが含まれる可能性があることを意味します。 そこで、データベースのコピー(おそらくバックアップファイル)を社外に送信したいと思います。しかし、潜在的に機密性の高い「削除された」データはすべてファイル内に残っています。次に、ファイルの未使用部分をゼロにします。 それは可能ですか?新しいデータベースを作成してすべてをコピーしたり、データベースのコピーをインスタントファイル初期化を有効にせずに別のサーバーに復元したり、ShrinkFileコマンドで積極的にデータベースファイルのほとんどまたはすべての未使用部分を削除したりできると思います、しかし手作業が少なく時間のかかる方法はありますか?理想的には、インスタントファイル初期化が有効になっていない場合と同じように、SQLにファイルのゼロ化を指示するコマンド。

3
大きなレプリケートされたディメンションの更新(SQL Server PDW)
データウェアハウスにはSQL Server PDWアプライアンスを使用しています。ウェアハウス内のテーブルの1つは、約2,000万行の複製されたテーブルです。ETLプロセスの一部として、このディメンションの古いレコードを期限切れにする必要があります。ただし、少数のレコード(<100)の更新が完了するまでに1時間以上かかることがわかります。これは、できれば改善したいことです。 当然、私が考えた1つのオプションは、このディメンションを複製から分散に変更することでした。私のテストでは、ETLプロセスに時間がかかる(1.5時間から30秒に短縮された)問題が修正されることを示していますが、結合がほとんど同じ分布に基づいていないため、このディメンションの分散バージョンに対するすべての結合が影響を受けます。カラム。これらのクエリのいくつかの実行プランを見ると、通常、ShuffleMoveまたはBroadcastMove操作のいずれかが表示されます。 ここにあるPDWの第一人者に対する私の質問は次のとおりです。 このディメンションの複製バージョンでレコードを更新するパフォーマンスを向上させるために他にできることはありますか? 繰り返しになりますが、分散テーブルへの移行は、他の人が開発した何百ものSQLクエリやレポートに影響を与えるため、最善の解決策ではないようです。

1
SQL Serverの最大および最小メモリ構成
このユースケースでの最小メモリと最大メモリの正しい設定は何ですか? サーバーには、Windows Server 2008 R2 / SQL Server 2008 Standard Editionを実行する8GBのRAM、デュアルIntel Xeonプロセッサーが搭載されています。30GBから5GBのサイズのデータ​​ベースをいくつか実行しています。 当初、メモリ使用量はデフォルト設定に設定されていました(min = 0 max = 2,147,483,647)。これらの設定では、ほとんどのメモリ使用量がsqlservr.exeによって占められ、最終的にサーバーは1〜2日ごとに再起動する必要があります。最初は正常に実行されますが、1日以内に、主キーを使用してレコードを検索するなどの単純な操作でタイムアウトが開始されます。 min = 4,096とmax = 6,144を変更しました。これにより、メモリ使用量は1.4GBのみになります。ただし、現在は4つすべてのCPUが常に50〜60%のCPU使用率で実行されています。サーバーの方がはるかに安定していますが、タスクの実行には約3分の1時間がかかります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.