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

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

3
SQL Server 2008 R2への挿入が最初にRAMにキャッシュされることをどのように保証できますか?
「バースト性」のデータストリームを想像してください。つまり、10,000個のイベントが非常に速く到着し、その後1分間何も続かない場合があります。 あなたの専門家のアドバイス:SQLのC#挿入コードを書くと、SQLがすべてのデータをRAMにキャッシュするという保証があります。これを達成するために、SQLサーバー自体のセットアップのパターン、または書き込み先の個々のSQLテーブルをセットアップするパターンを知っていますか? もちろん、RAMに独自のキューを作成するという独自のバージョンを実行できますが、いわば旧石器時代の石Aを再発明したくありません。

3
ストアドプロシージャを介してTSQLシーケンスをエミュレートする
TSQLシーケンスをエミュレートするストアドプロシージャを作成する必要があります。つまり、呼び出しごとに常に増加する個別の整数値を提供します。さらに、整数が渡された場合、結果がこれまでにないか、利用可能な次に高い整数がなかった場合、その値を返す必要があります。言うまでもなく、このSPを同時に呼び出す複数のクライアントが存在する可能性があります。 列MetaKey varchar(max)およびMeatValueLong bigIntを持つ表MetaInfoが与えられます。「Internal-ID-Last」のMetaKeyを持つ行には、割り当てられた最後の最高値が含まれることが予想されます。次のストアドプロシージャを作成しました。 CREATE PROCEDURE [dbo].[uspGetNextID] ( @inID bigInt ) AS BEGIN SET NOCOUNT ON; BEGIN TRANSACTION UPDATE MetaInfo WITH (ROWLOCK) SET MetaValueLong = CASE WHEN ISNULL(MetaValueLong,0) > @inID THEN MetaValueLong+1 ELSE @inID+1 END WHERE MetaKey = 'Internal-ID-Last' SELECT MetaValueLong FROM MetaInfo WHERE MetaKey = 'Internal-ID-Last' COMMIT TRANSACTION END …

3
パーティションキーを更新して、パーティション間で行を移動できますか?
これはかなり単純な質問だと思いますが、実際にはこれに対する答えを見つけるのに苦労しました。 質問:パーティション列を更新してパーティションの境界を越えるだけで、パーティションテーブル内のデータ行をあるパーティションから別のパーティションに移動できますか? たとえば、パーティションキーを持つテーブルがある場合: CREATE TABLE SampleTable ( SampleID INT PRIMARY KEY, SampleResults VARCHAR(100) NOT NULL, ) 主キーにマップするパーティション関数を使用して: CREATE PARTITION FUNCTION MyPartitionFunc (INT) AS RANGE LEFT FOR VALUES (10000, 20000); SampleIDを1から(たとえば)500,000に変更して、最初のパーティションから3番目のパーティションに行を移動できますか? 注:どちらもパーティション分割をサポートしているため、SQL Server 2005と2008の両方としてこれをタグ付けしています。彼らはそれを異なって扱いますか?

6
DB階層を表示しようとすると「ロック要求のタイムアウト期間を超えました」エラー
データベースに問題があります。 通常よりはるかに遅くなりますが、基本的なクエリを実行できます。 SSMS Object Explorerでテーブル、ビュー、またはプロシージャの階層ツリーを表示しようとすると、が表示されますlock request time out period exceeded。 このデータベース内のオブジェクトで実行される私のSSRSレポートは完了していません。 このデータベースに保存されているプロシージャに関連付けられているジョブも実行されません。 私が使ってみましたsp_who2が、これは問題を解決していない、データベース上のすべての接続を見つけ、殺すために。 ここで何が起こっていますか?どうすれば解決できますか?


4
TVFにラップすると、このクエリが大幅に遅くなるのはなぜですか?
数秒で実行されるかなり複雑なクエリがありますが、テーブル値の関数にラップすると、はるかに遅くなります。実際には終了させて​​いませんが、終了せずに最大10分間実行されます。唯一の変更点は、2つの日付変数(日付リテラルで初期化された)を日付パラメーターに置き換えることです。 7秒で実行 DECLARE @StartDate DATE = '2011-05-21' DECLARE @EndDate DATE = '2011-05-23' DECLARE @Data TABLE (...) INSERT INTO @Data(...) SELECT... SELECT * FROM @Data 少なくとも10分間実行 CREATE FUNCTION X (@StartDate DATE, @EndDate DATE) RETURNS TABLE AS RETURN SELECT ... SELECT * FROM X ('2011-05-21', '2011-05-23') 以前にRETURNS @Data TABLE(...)句を使用して関数をマルチステートメントTVFとして記述しましたが、インライン構造のそれを交換しても目立った変更はありませんでした。TVFの長い実行時間は実際のSELECT * FROM X時間です。実際にUDFを作成するには数秒かかります。 …

3
他のトランザクションをブロックするSPIDのスリープ
私が経験しているいくつかのブロッキングを追跡するのに本当に苦労しています。 ルートブロックSPIDのステータスは「sleeping」、cmdは「AWAITING COMMAND」、およびはsqltextですSET TRANSACTION ISOLATION LEVEL READ COMMITTED。 [ブロックされたトランザクション数別の上位トランザクション]レポートを表示すると、ブロックSQLステートメントは「-」です。 SQLでトレースを実行し、ルートブロッキングSPIDをトレースしてブロッキングが発生した場合、実際にはどこにも導かれていません。最後のtraceステートメントは同じであるsqltext以上SET TRANSACTION ISOLATION LEVEL READ COMMITTED。 関連するすべてのストアドプロシージャをチェックして、それらにTRY / CATCH BEGIN TRAN / COMMIT TRAN / ROLLBACK TRANステートメントがあることを確認しました(すべてにストアドプロシージャを使用しているため、スタンドアロンのステートメントは実行されません)。この問題は過去24時間に発生し始めたばかりで、システムに変更を加えたと主張する人はいません。 解決策:めったに使用されないストアドプロシージャの1つに挿入のエラーがありました(列の数が一致しませんでした)が、正確に何が起こっているのかまだ混乱しています。 すべてのトレース情報を確認すると、このストアドプロシージャのEXECステートメントが時々リストされましたが、ブロックするSPIDでBLOCKが発生する直前には決してありませんでした。ブロックを開始すると、トレースはその実行(またはその中のステートメントのいずれか)を記録しなかったようです。ただし、トレースがその実行を記録し、ブロッキングが発生しなかった場合もあります。 ストアドプロシージャのエラーレポートはユーザーから送信されたものであり、トレースで複数のEXECステートメントを見つけてSSMSで実行することができました。それらを実行したとき、ブロッキングが発生したりハングしたりすることはありませんでした。それらは期待通りに実行されました(catchブロックが起動し、エラー後にトランザクションをロールバックしました)。ストアドプロシージャの修正を解決した後、問題は再び発生していません。

2
WHERE句で変数を使用しないようにする方法
次のような(簡略化された)ストアドプロシージャがある場合: CREATE PROCEDURE WeeklyProc(@endDate DATE) AS BEGIN DECLARE @startDate DATE = DATEADD(DAY, -6, @endDate) SELECT -- Stuff FROM Sale WHERE SaleDate BETWEEN @startDate AND @endDate END Saleテーブルが大きい場合、SELECTローカル変数が原因でオプティマイザが最適化できないため、実行に時間がかかる可能性があります。SELECT変数を使用してパーツを実行し、日付をハードコードし、実行時間を約9分から約1秒にテストしました。 「固定」日付範囲(週、月、8週など)に基づいてクエリを実行する多数のストアドプロシージャがあるため、入力パラメータは@endDateのみで、@ startDateはプロシージャ内で計算されます。 問題は、オプティマイザを危険にさらさないために、WHERE句の変数を避けるためのベストプラクティスは何ですか? 私たちが思いついた可能性を以下に示します。これらのベストプラクティスのいずれか、または別の方法がありますか? ラッパープロシージャを使用して、変数をパラメーターに変換します。 パラメーターは、ローカル変数と同じようにオプティマイザーに影響しません。 CREATE PROCEDURE WeeklyProc(@endDate DATE) AS BEGIN DECLARE @startDate DATE = DATEADD(DAY, -6, @endDate) EXECUTE DateRangeProc @startDate, @endDate …

3
SQL Server NTFSアロケーションユニットサイズ
SQL Server 2008 R2を実行しているWindows 2008 R2では、DISK IOのパフォーマンスに対するNTFSアロケーションユニットサイズはどれほど重要ですか。ミッションクリティカルなアプリ用に数台のサーバーを構築したサーバー管理者は、NTFSアロケーションユニットサイズ(クラスターサイズ)をデフォルトの64 KBではなく4 KBのままにしたようです。SQLサーバーは既にインストールされています。 SQLをアンインストールするために苦労する価値はありますか?64 KBのクラスターサイズでドライブをフォーマットし、SQLサーバーを再インストールしますか?

2
SQL Server-成長するデータベースファイルのベストプラクティス
私は、SQL Server 2008 r2のデータコレクターを介して2週間、ファイルの増加を監視しています。データベースは、約35(MB)/日で一貫して成長しています。DBは初期サイズの2 GBにまだ達していません。 DBファイルの自動拡張は5MBに設定されています。別のアプローチを試してみたいので、提案やコメントを探しています。 毎週日曜日の夜1:30 AMに実行されるチューニングタスクがあります。タスクは: データベースの整合性を確認する ログファイルを圧縮する-(ログモードがシンプルなので、これは問題ありません) データベースの縮小 インデックスの再編成 インデックスを再構築 統計を更新する 履歴をクリーンアップする 毎週の調整計画にさらに2つのステップを追加したいと思います。 使用領域が特定のしきい値または合計サイズに達した場合、データベースファイルを500 MB増やします。 使用されているスペースが合計サイズの特定のしきい値に達すると、ログファイルを250 MB(縮小後)増やします。 オフラインの時間に成長の負担をかけることにより、高負荷時の自動成長イベントの数を減らしてパフォーマンスを向上させたいと考えています。 自動拡張ファイルに関する質問が2つあります。 ファイルの成長ステップを配置する最適な場所は、現在のステップの前か後ですか? を使用しALTER DATABASE|MODIFY FILEてファイルを拡大すると、どうすれば判断できSpaceUsedInFile >= (TotalFileSpace-@AllowanceThreshold)ますか?

1
テーブルが最後に更新された時刻を見つける
クエリ: SELECT name AS TableName, create_date AS CreatedDate, modify_date as ModifyDate FROM sys.tables order by ModifyDate; ...テーブルが最後に作成および変更された時間を(DDLの観点から)教えてくれます。しかし、実際のデータが最後にテーブルに挿入または削除された時間を知りたいのです。SQL Serverでこれを取得することは可能ですか?

5
いずれかの列がNULLかどうかをテストします
私は、大きなテーブルの任意の列に少なくとも1つの空白(NULL /空)値があるエントリのリストがあるかどうかをテストするためにできる簡単なクエリを見つけようとしています。 私のようなものが必要です SELECT * FROM table AS t WHERE ANY(t.* IS NULL) やりたくない SELECT * FROM table AS t WHERE t.c1 = NULL OR t.c2 = NULL OR t.c3 = NULL これは巨大なクエリになります。

4
SQL Server 2005/2008 UTF-8照合/文字セット
私はセットに直接オプション(複数可)を見つけることができませんUTF-8rellated Collations/Charsetsと同じで、他のSQLエンジンに設定することも可能ですが、SQL Serverの2005/2008はそこだけでラテン語とSQL照合順序は、SQL Serverの2005/2008に。 これらの照合/文字セットをSQL Serverエンジン(両方のバージョン)2005/2008 Win2008 OSで強制/インストールするオプションはありますか

1
DBCC CheckDBはどのような種類の破損を見逃すことができますか?
この質問は、この以前の投稿と、次のように復元された将来の調査のためにデータベースを提出したことによって促されました。 BACKUP 'BrokenDatabase' detected an error on page (1:123456) in file ’BrokenDatabase.mdf'. Error: 3043, Severity: 16, State: 1. リンクされた質問とDBCC PAGE調査の準備ができているバックアップでは、DBCC CHECKDBはエラーなしで合格しましたが、破損が明らかに存在します。 CHECKDBはパスするがBACKUP WITH CHECKSUMは失敗することにより、どのような種類の破損が発生する可能性がありますか?

1
パラメーターをどのように並べ替えますか?
実行中のストアドプロシージャに関するフィードバックを求めることができるかどうか、およびシナリオを処理するより効率的な方法があるかどうか疑問に思うだけです(きっとあるはずです!)。 基本的に、1つ以上のステータスと並べ替え順序を持つ可能性のあるレコード(ジョブ)のリストを返すために呼び出す単一のSPがあります(ページングにRowNumを使用しています)。現時点では、ステータスの変化は常に変化する可能性があるため(ユーザーなどによって)、WITH RECOMPILEを使用しています。いくつかのフィルタリングも行われています。 IFステートメントを使用して、本質的に同じビットのコードを実行し、唯一の変更はソート順です。 私の質問は次のとおりだと思います:これを行うためのより良い方法はありますか(おそらく、ステータスごとに異なるSP)。知識不足のために物事を複雑化しすぎていますか(かなりありそうです)SPは実際には問題ありませんが、行数を減らすために微調整が必​​要ですか? 以下のSPの一部を貼り付けました-完全なコードとの唯一の違いは、異なる並べ替え順序の追加のIFステートメントです... フィードバックをお願いします。 前もって感謝します! PROCEDURE [dbo].[sp_Jobs] @PageNumber int, @PageSize int, @FilterExpression varchar(500), @OrderBy varchar(50), @CustomerID int, @ShowNotSet bit, @ShowPlaced bit, @ShowProofed bit, @ShowReProofed bit, @ShowApproved bit, @ShowOnTime bit, @ShowLate bit, @ShowProblem bit, @ShowCompleted bit, @ShowDispatched bit, @ShowUnapproved bit, @ShowClosed bit, @ShowReturned bit, @UserID int WITH RECOMPILE …

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