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

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


2
異なるプロセスの同じ一時テーブルのロックからのデッドロック
私は不可能だと思った何かを示すように見えるデッドロックを発見しました。デッドロックには2つのプロセスが関係します。 1. process8cf948 SPID 63 一時テーブル#PB_Cost_Excp_Process_Invoices_WorkでALTER TABLEを実行します。 オブジェクトID 455743580でテーブル#PB_Cost_Excp_Process_Invoices_WorkのIXロックを所有 2. process4cb3708 SPID 72 一時テーブル#PB_Cost_Excp_Process_Invoices_WorkでUPDATEを実行します。これは、テーブルの独自のコピーであると想定されています。 同じオブジェクトID 455743580で#PB_Cost_Excp_Process_Invoices_WorkのSch-Mロックを所有しています! これは不可能だと思われます。何か不足していますか?#Temporaryテーブルは、これら2つのSPID間で本当に再利用されましたか? これは、累積的な更新1(バージョン10.50.4260)が適用されたSQL Server 2008 R2 Service Pack 2にあります。 変更されていない完全なデッドロックトレースは以下のとおりです。2つのプロセスが、同じテーブル名#PB_Cost_Excp_Process_Invoices_Work_SNIP_0000000D8519を使用して同じオブジェクトIDで動作していることに注意してください。 12/14/2012 13:46:03,spid23s,Unknown,waiter id=process8cf948 mode=X requestType=wait 12/14/2012 13:46:03,spid23s,Unknown,waiter-list 12/14/2012 13:46:03,spid23s,Unknown,owner id=process4cb3708 mode=Sch-M 12/14/2012 13:46:03,spid23s,Unknown,owner-list 12/14/2012 13:46:03,spid23s,Unknown,objectlock lockPartition=0 objid=455743580 subresource=FULL dbid=2 objectname=tempdb.dbo.#PB_Cost_Excp_Process_Invoices_Work_________________________________________________________________________________0000000D8519 id=lock371705d00 mode=Sch-M associatedObjectId=455743580 12/14/2012 13:46:03,spid23s,Unknown,waiter …

2
呼び出し側データベースコンテキストで実行する中央ストアドプロシージャ
sys.dm_db_index_physical_statsビューを使用して、カスタマイズされたメンテナンスソリューションに取り組んでいます。現在、ストアドプロシージャから参照されています。これで、そのストアドプロシージャがデータベースの1つで実行されると、必要な処理が実行され、データベースに関するすべてのレコードのリストがプルダウンされます。別のデータベースに配置すると、そのDBのみに関連するすべてのレコードのリストがプルダウンされます。 例(下部のコード): データベース6に対して実行されたクエリは、データベース1〜10の[要求された]情報を示します。 データベース3に対して実行されたクエリは、データベース3のみの[要求された]情報を表示します。 特にデータベース3でこの手順が必要な理由は、同じデータベース内にすべてのメンテナンスオブジェクトを保持したいからです。このジョブをメンテナンスデータベースに配置し、あたかもそのアプリケーションデータベースにあるかのように動作させたいと思います。 コード: ALTER PROCEDURE [dbo].[GetFragStats] @databaseName NVARCHAR(64) = NULL ,@tableName NVARCHAR(64) = NULL ,@indexID INT = NULL ,@partNumber INT = NULL ,@Mode NVARCHAR(64) = 'DETAILED' AS BEGIN SET NOCOUNT ON; DECLARE @databaseID INT, @tableID INT IF @databaseName IS NOT NULL AND @databaseName NOT IN ('tempdb','ReportServerTempDB') BEGIN …

5
テーブルをテキストファイルにエクスポートする最速の方法は何ですか
SQL Server 2012データベースと、300万行、おそらく50列のテーブルがあります。無人のバックグラウンドの.netプロセス(SQLまたはPowershellコマンドを発行する可能性があります)をテキストファイルにエクスポートする最速の方法は何ですか?.netプロセスは、エクスポートがいつ完了したか、またはエラーが発生したかどうかを知る必要があります。データ型はall intまたはになりnvarcharます。 私は、ado.netを使用してselect *コマンドを実行し、データリーダーをループして各レコードのファイルに書き込む純粋なC#コードは低速であり、これを並列化する方法はないと想定しています。 エクスポートは、SQL Serverマシンのローカルフォルダーではなく、リモート共有ネットワークフォルダーに行うことが理想的です。SQL ServerはHAクラスターになります。SSISはこれに適していますか、データ変換は必要ありませんか? .NetプロセスはマシンAで実行され、SQL ServerはマシンBで実行され、最終的なファイルの宛先はネットワーク共有です。1つのオプションは、SQLサーバーがファイルをネットワーク共有に直接書き込むことです。もう1つのオプションは、SQL ServerがマシンAに書き込み、ファイルが書き込まれると、.netプロセスがそれをネットワーク共有にコピーすることです。正式なSLAはありませんが、ファイルの書き込みに30分から1時間かかります。

3
使用する他のデータベースの内部ストアドプロシージャ用の中央CLRストアドプロシージャ/関数リポジトリライブラリを設定しますか?
C#CLRで開発したコードを使用して、システム上のすべてのデータベースで使用できるようにしたいので、それぞれを信頼できるものに設定し、CLRをオンにして、それぞれに同じコードの束を保持する必要はありません。 。 管理およびセキュリティの観点からこれを行う最良の方法はありますか?CLR関数は、文字列ブレーカー、電子メール検証、url en / decode、base64などのように非常に基本的です。各データベースのdboスキーマのみが関数にアクセスできるようにしたいと思います。 これを行う簡単な方法はありますか? また、CLR dllが埋め込まれているかどうか、およびデータベースを移動する場合、タグが一緒に移動するか、dllも移動する必要があるかどうかはわかりません。 ありがとう

3
特定の列の更新を制限します。ストアドプロシージャによるこれらの列の更新のみを許可する
ストアドプロシージャを通じてのみ更新したい繊細な価格列があります。更新するように設計されたストアドプロシージャを使用していない場合、すべてのコードまたは手動でこれらの価格列の値を変更しようとすると失敗します。 トリガーとトークンテーブルを使用してこれを実装することを検討しています。私が考えているアイデアは、トークンテーブルを持つことです。ストアドプロシージャは、最初にトークンテーブルに値を挿入する必要があります。次に、価格列を更新します。更新トリガーは、更新された行のトークンテーブルにトークンが存在するかどうかを確認します。見つかった場合、続行します。トークンが見つからない場合、例外をスローし、更新トランザクションを失敗させます。 この制限を実装する良い/より良い方法はありますか?


3
detach / copy / attachを使用するか、backup-restore-replayを使用してデータを移行する必要がありますか?
データベースファイルの新しいSAN(古いSANから)への移行に着手しようとしていますが、これを実装するためのオプションがいくつかあります。(1)サーバー上の新しいデータベースに完全バックアップを復元する作業レベルを検討することをお勧めしました。ただし、(2)私の当初の計画は、データベースをデタッチしてから再アタッチすることにより、古いSANから新しいSANにファイルをコピーすることでした。 私の腸は、よりフェイルセーフだと思うので、切り離して、コピーして、アタッチしたいことを教えてくれますが、それは私の単純なことかもしれません。データベースの名前を変更する過程で、トランザクションを見逃したり、何らかの形で「何かを壊したり」したくありません。 私の質問は、BACKUP-RESTORE-Replayオプションに対する懐疑論に正当化されるかどうか、およびそのオプションのその他のメリットまたはリスクは何ですか?

1
管理スタジオが閉じられたときにSQL Serverのパフォーマンスが低下する
SQL Server 2008 r2 expressの奇妙な動作に気付きました。 通常、クエリの実行時間は約650ミリ秒ですが、Management Studioを開いて単純なクエリ(たとえばSELECT * FROM Something)を実行すると、実行時間は約40ミリ秒になります。管理スタジオを閉じると、この値は通常〜650msに戻ります クエリが実行された場所に関係なく:Management Studioまたは私のアプリケーションから(ADO.Netを使用) ARITHABORT設定は効果がありません なんでこんなことが起こっているの?
17 sql-server  ssms 


4
並列プランの不正確な「実際の」行カウント
これは純粋にアカデミックな質問であり、問​​題を引き起こしていないので、その振る舞いの説明を聞きたいだけです。 Itzik Ben-Ganのクロス結合CTE集計表の標準的な問題を取り上げます。 USE [master] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUNCTION [dbo].[TallyTable] ( @N INT ) RETURNS TABLE WITH SCHEMABINDING AS RETURN ( WITH E1(N) AS ( SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 …
17 sql-server 

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

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の両方としてこれをタグ付けしています。彼らはそれを異なって扱いますか?

2
CROSS APPLYは外部結合を生成します
パーティションで異なるSQLカウントへの回答として、Erik Darlingはこのコードを投稿し、以下の不足を回避しましたCOUNT(DISTINCT) OVER ()。 SELECT * FROM #MyTable AS mt CROSS APPLY ( SELECT COUNT(DISTINCT mt2.Col_B) AS dc FROM #MyTable AS mt2 WHERE mt2.Col_A = mt.Col_A -- GROUP BY mt2.Col_A ) AS ca; クエリの使用CROSS APPLY(ないOUTER APPLY)、なぜそこにある外側は代わりの実行計画に参加し、内側が参加? また、group by句のコメントを外すと内部結合が発生するのはなぜですか? データは重要ではないと思いますが、他の質問のkevinwhatによって与えられたデータからコピーします。 create table #MyTable ( Col_A varchar(5), Col_B int ) insert into …

1
可用性グループのセカンダリデータベースで大きなクエリを実行すると、プライマリデータベースのトランザクションパフォーマンスに影響しますか?
SSRSおよびTableauのレポート用に、リアルタイムまたはほぼリアルタイムのデータを提供する必要があります。実稼働OLTPシステムが長時間実行されるクエリによって悪影響を受けるのは望ましくありません。可用性グループのセカンダリデータベースで大きなクエリを実行すると、プライマリデータベースのトランザクションパフォーマンスに影響しますか?

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