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

SQL Server 2008 R2(メジャービルドバージョン10.50.xxxx)。また、sql-serverでタグ付けしてください。

1
「データの移動が原因でNOLOCKでスキャンを続行できませんでした」を再現する方法
NOLOCK一部の大規模なジョブで、「データの移動が原因でスキャンを続行できませんでした」というメッセージが時々表示さWITH (NOLOCK)れます。これは、選択クエリで実行されます。 これは、ページ分割があり、データが本来あるべき場所でなくなったときにデータを選択しようとすることと関係があることを理解しています。それが私の環境で起こっていることだと思います。 これをどのように再現しますか? 短期的な回避策を講じてエラーをキャッチし、これが発生したときに再試行しようとしていますが、再現できない場合はテストできません。これを引き起こす合理的に信頼できる方法はありますか? それが発生した場合、クエリを再度実行すると成功します。そのため、実際のデータやデータベースが永続的に破損する心配はありません。クエリ内の一部のテーブル(およびそのインデックス)は、頻繁に削除、再作成、および再設定されるため、これに関連していると想定しています。 削除NOLOCKは、私が対処する長期的な問題です。NOLOCKそもそもそこに置かれた理由は、クエリが非常に悪いため、日常のトランザクションでデッドロックが発生しNOLOCK、デッドロックを阻止するためのバンドエイドが機能したためです(機能しました)。ですから、永久的な解決策ができるまで、私はバンドエイドの上にバンドエイドを必要としています。 Hello Worldでそれを再現できれば、おそらく1時間もかからずにバンドエイドを仕事に投入する予定です。検索と置換の削除を実行できませんNOLOCK。これは、アプリのデッドロックが再び発生し始めるためです。 コミットされた読み取りスナップショット分離を使用することは良い可能性です。詳細については、データベースチームと協力する必要があります。私たちの問題の一部は、そのようなことを処理するSQL Serverの専門家がいないことです。また、現時点でその変更を行うのに十分な分離レベルを理解していません。

2
大規模な削除クエリがフリーズしているようです
18億行のデータベースで削除クエリを実行しました。この削除により、12億行が削除されます。 後から考えて、このクエリを一度に100mに分割したはずですが、24時間実行されていて、ログファイルがログファイルに許可されている最大サイズである2Tbの位置にいます。 データベースは単純復旧モードです。 このクエリを保存するものはありますか?または、SQL Serverを再起動して何が起こるかを確認する必要がありますか?データベースは使用できなくなりますか?これをできるだけきれいに殺すために私たちにできることはありますか?

2
SQL Server 2008 R2パーティショニング-同じファイルグループ、1つのファイル、2つのpartition_numbers-ヘルプ
SQL Serverでのパーティション分割は初めてです。BrentOzarのガイドから学びました。 数回、奇妙なシナリオに遭遇しました。私が走るとき: SELECT * FROM ph.FileGroupDetail ORDER BY partition_number Go 2つの異なるpartition_numbersで2回表示されている同じファイルグループがあり、1つは範囲値で最後に正しく、もう1つはnullのrange_valueで最初にあります。 画像を拡大するにはここをクリック いくつかの質問: これはどのように起こっていますか?どこで間違っていますか? どうすれば問題を解決できますか?つまり、最初に空のパーティションが既にあるので、それを最初に取り除く方法です。 ファイル(空の場合は機能していました)とファイルグループを削除しようとしましたが、ファイルグループは削除できないと述べました。 誰かがこれがどのように起こったのか、そしてパーティション2のエントリを取り除く方法を説明してくれませんか?

3
MS SQL Serverのバージンクエリのパフォーマンスを向上させる方法は?
ASP.NET Webサイトで、独自の独立したデータキャッシュを実行し、データが長期間変化しないため、同じクエリでSQL Serverに2回クエリする必要がありません。そのSQL Serverへの初回(バージン)クエリのパフォーマンスを改善する必要があります。一部のクエリは、SQL Serverが使用する可能性のある大量のデータを処理しますtempdb。一時テーブル変数や一時テーブルは使用しないので、SQL Serverはtempdb必要なときにいつでもそれ自体を使用することにしました。 私のデータベースサイズは16Gbですが、サーバーマシンで32Gbの物理RAMを使用できます。 MS SQL Serverのキャッシュ戦略は、同じデータを再度ロードする必要がある場合に、同様のクエリのパフォーマンスを向上させるために、RAMにデータを保持しようとすることを理解しています。さらに、tempdbの代わりに使用可能なRAMを使用して、ディスクアクセスを引き起こさずにパフォーマンスを高速化しようとします。 tempdb SQL Serverに何かを格納する必要があるクエリが来て、十分なRAMが利用できない場合、SQL Serverには2つの選択肢があると思います。 1)キャッシュされたデータをアンロードし、tempdbの代わりにスペアRAMを使用してディスクの書き込みを回避する 2)今後のクエリのためにキャッシュされたデータを保持し、tempdbの使用を開始します。これにより、ディスクへの書き込みが遅くなります。 この状況でSQL Serverがどのような選択をするかはわかりませんが、最初の(バージン)クエリのパフォーマンスのみを考慮し、同じクエリをSQL Serverに再度送信することはないため、選択#1をしたいと思います。 (私は同様のクエリを送信する可能性があります)。 このシナリオのSQL Serverキャッシュ戦略は何ですか? 新しいクエリのtempdbの回避と2回目のクエリの速度の間で、RAMの使用量をどのようにバランスさせますか? SQL Serverを選択#1するように構成することは可能ですか?はいの場合、どのように? 他にどのようにしてすべてのバージンSQLクエリのパフォーマンスを向上させることができますか? SQL Serverのキャッシュ戦略がわからないので、データベースをRAMディスクに配置します。これにより、SQL Serverが常に#1を選択する場合でも、キャッシュされていないデータを高速で読み込むことができます。SQL Serverが選択肢#2を選択し続けると、SQL Serverが利用可能なRAMを少なくしてより多くのtempdbを使用し始める可能性があります(RAMディスクに16Gbを使用した後は16Gbしか残りません)tempdb。 SQL 2008 R2のソリューションに興味がありますが、おそらくSQL 2008、SQL 2005でも同じで、SQL 2000かもしれません。 明確化: そのボックスで実行されている他のアプリケーションはなく、SQL Server専用です。ウェブサイトは別のボックスで実行されます。 Windows Server 2008 R2 Enterprise 64ビット上のSQL Server 2008 R2 Standard …

2
SQL Serverのキャッシュからテーブルをクリアするにはどうすればよいですか?
キャッシュすべきではないテーブルがデータベースにいくつかあります。 SQL Serverにテーブルのページをキャッシュしないように指示する方法、またはキャッシュから単一のテーブルをフラッシュする方法 すべてのキャッシュをフラッシュすることはオプションではありません。 SQL Server 2008とSQL Server 2008 R2を使用しています。

2
「LIKE OR LIKE、OR LIKE、OR LIKE、OR LIKE」のより良いアプローチ
この質問では、彼は私と同じ問題を抱えています。私は次のようなものが必要です: select * from blablabla where product like '%rock%' or like '%paper%' or like '%scisor%' or like '%car%' or like '%pasta%' これは醜く、インデックスを使用していません。この場合、これは実際にこれを行う唯一の方法です(文字列内の複数の単語を選択するため)、またはFULLTEXTを使用する必要がありますか? 私が理解しているように、フルテキストでは、文字列内の複数の単語を選択できます。 この質問は全文についても話します

5
与えられた範囲の素数
最近、すべての素数(1〜100)を印刷するタスクが与えられました。私はそこに劇的に失敗しました。私のコード: Create Procedure PrintPrimeNumbers @startnum int, @endnum int AS BEGIN Declare @a INT; Declare @i INT = 1 ( Select a = @startnum / 2; WHILE @i<@a BEGIN @startnum%(@a-@i) i=i+1; ) END 完成せずに終わってしまいましたが、データベース(SQL Server 2008 R2)でこのようなプログラムを実行することは可能でしょうか。 はいの場合、どのように終了する可能性があります。

2
SQL Server 2008 R2でデータベースメールを介してフォーマットされたHTMLメールを送信する必要がある
私の要件は、自動メールを(データベースメール経由のフォーマット済みHTMLメール)として作成することです。ジョブがトリガーされると、データがテーブルに挿入され、その情報がメールとして送信されるようにスケジュールされています。しかし今クライアントはこのフォーマットで要求しました。 私が行った現在のフォーマット PO Date:2014-11-26 PO ID:PO1 SAP Ref:0001106102 GRN:1067 DealerID:045 Dealer Name:ABC(Pvt)Ltd. 2 Status:New フォーマットのようなテーブルでクライアントからリクエストされたフォーマット PO Date |PO ID| SAP Ref| GRN|DealerID|Dealer Name|Status これは、データをEmail_Table(_ERROR_MAIL)に挿入するために使用するSQLクエリであり、これは要件に応じて必要とされます IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'ImpCancelledGRN') BEGIN DROP PROCEDURE [dbo].[ImpCancelledGRN] END GO CREATE PROCEDURE [dbo].[ImpCancelledGRN] WITH ENCRYPTION AS …

2
列を動的にエイリアスするにはどうすればよいですか?
可変名の列が20あるテーブル(私が設計したものではない)があります。つまり、表示しているレコードのタイプに応じて、該当する列の名前が変わる可能性があります。 可能な列名は別のテーブルに格納されているため、非常に簡単にクエリできます。 したがって、私が本当に探しているクエリは次のようになります。 SELECT Col1 AS (SELECT ColName FROM Names WHERE ColNum = 1 and Type = @Type), Col2 AS (SELECT ColName FROM Names WHERE ColNum = 2 and Type = @Type) FROM Tbl1 WHERE Type = @Type 明らかにそれはうまくいかないので、どうすれば同様の結果を得ることができますか? ' クエリ文字列を作成してEXECUTEing しようとしましたが、「Command(s)Completed Successfully」が返され、行セットが返されないようです。 不正なクエリを使用して動的SQLを作成していたため、空の文字列が作成されたことがわかりました。SQL Serverは空の文字列を正しく実行しました。 列名を単にハードコーディングするのではなく、これを実行する必要がある理由は、列名がユーザーが構成できるためです。

4
暗号化された/暗号化されたデータを持つSQL Server 2008 R2のすべての列をすばやく見つける方法はありますか?
暗号化された/暗号化されたデータを持つSQL Server 2008 R2のすべての列をすばやく見つける方法はありますか? 開発サーバーの暗号化されたすべての列のデータを(ビジネスルールに従って)無効にする必要があります。私は定期的に使用しているため、ほとんどの列を知っていますが、徹底し、すべての列が見つかったことを証明できるようにしたいと考えています。 私はWebを検索し、INFORMATION_SCHEMAを調べて、有用だと思われるDMVとsys.columnsとsys.objectsを確認しましたが、今のところうまくいきません。

2
データベースのプロパティダイアログボックスの[ファイル]ページからデータベースの所有権を変更するとエラーが発生する
データベースを復元し、db_ownerとして新しいユーザー(ログイン元と同じユーザー)を作成しました。データベースダイアグラムを表示したいときにエラーが発生しました このデータベースには有効な所有者がいないため、データベースダイアグラムサポートオブジェクトをインストールできません。続行するには、まず[データベースのプロパティ]ダイアログボックスの[ファイル]ページまたは[承認の変更]ステートメントを使用して、データベース所有者を有効なログインに設定し、次にデータベースサポートオブジェクトを追加します データベースプロパティの[ファイル]ページから所有権を変更しようとすると、次のようなエラーが発生します。 データベース 'ABC'の所有者の設定に失敗しました。(Microsoft.SqlServer.SMO)追加情報:SMOで例外が発生しました提案された新しいデータベース所有者James-PC \ Jamesは、ユーザーJamesとしてこのデータベースにマップされています。パラメータ名:James-PC \ James " 別のシステムからデータベースのバックアップを復元した後、このコンピューターでデータベースダイアグラムを表示できるように、問題を修正してください。


1
不等式クエリのインデックス付け方法は?
float列の値に基づいてデータを除外するクエリがあります select * from My_Table where my_Float_column != 0 and my_Float_column is not null 私がそれを助けることができるならば、私はフロートタイプにインデックスを付けたくありません。実行プランは、パフォーマンスを向上させるために、以下のようなフィルターされたインデックス(ここでは0とnull値のみをインデックス付けする)を使用するのに十分賢いでしょうか? CREATE NONCLUSTERED INDEX IX_My_Table_Float_Filtered ON My_Table (my_Float_column) WHERE my_Float_column = 0 or my_Float_column is null

4
有効期限の異なる類似のレコードをマージするにはどうすればよいですか?
私が作業しているテーブルには、3つのコンポーネントがあります。 IDカラム(別のテーブルの主キー) 一部のデータ列 有効な日付from/ to列。 値: ID Data From To 1 a 2015-01-01 2015-01-05 1 a 2015-01-06 2015-01-10 1 b 2015-01-11 2015-01-15 1 a 2015-01-16 2015-01-20 2 c 2015-01-01 2015-01-05 2 c 2015-01-06 2015-01-10 テーブルは、一定の間隔で別のデータソースの「スナップショット」を取得し、有効期限をレコードに割り当てることによって更新されます。問題は、これらのスナップショットにより、その間隔中にまったく変更されなかった(有効期間が異なる)レコードの重複エントリが作成されることです。 連続した日付の行を探し、それらをマージして単一の有効期間を割り当てることにより、テーブルのサイズを小さくしたいと考えています。例えば: ID Data From To 1 a 2015-01-01 2015-01-10 1 b 2015-01-11 2015-01-15 1 a …

2
処理のためにレコードを「チェックアウト」するための戦略
これに名前の付いたパターンがあるのか​​、それともひどい考えなのでないのかわかりません。しかし、アクティブ/アクティブの負荷分散された環境で動作するサービスが必要です。これはアプリケーションサーバーのみです。データベースは別のサーバーに配置されます。テーブル内の各レコードのプロセスを実行する必要があるサービスがあります。このプロセスには1〜2分かかる場合があり、n分ごとに繰り返されます(構成可能、通常は15分)。 この処理を必要とする1000レコードのテーブルと、この同じデータセットに対して実行される2つのサービスで、各サービスに処理するレコードを「チェックアウト」させたいと思います。一度に1つのサービス/スレッドのみが各レコードを処理していることを確認する必要があります。 過去に「ロックテーブル」を使用していた同僚がいます。他のテーブルのレコードを論理的にロックするためにレコードがこのテーブルに書き込まれ(他のテーブルはかなり静的で、非常に時々新しいレコードが追加されます)、削除されてロックが解放されます。 新しいテーブルが常に削除を挿入するのではなく、いつロックされ、現在ロックされているかを示す列があるとよいのではないかと思います。 誰かがこの種のことについてのヒントを持っていますか?長期的な論理ロックの確立されたパターンはありますか?一度に1つのサービスのみがロックを取得するようにするためのヒントはありますか?(私の同僚はTABLOCKXを使用してテーブル全体をロックしています。)

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