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

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

2
切り捨て/大きな挿入の後にインデックスを再構築する必要がありますか?
(他のテーブルのデータ、計算などに基づいて)新しいデータを挿入する前に、約175万行のテーブルを切り捨てるストアドプロシージャがあります。 基本的なアウトラインは非常に簡単です: テーブルを切り捨て 1回あたり約75,000の「バッチ」に175万行を挿入します。 このプロセスでいつでも明示的にインデックスを再構築する必要があるかどうか疑問に思っていますか?例えば テーブルを切り捨て ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [または類似の何か] 175万行挿入 多分 ALTER INDEX ALL ON xxx DISABLE テーブルを切り捨て 175万行挿入 ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [または類似の何か] どんな支援も感謝します... DBAではなく-DBをかなりよく知っている開発者はより正確です!

2
SELECT / INSERTデッドロック
このインスタンスは、SharePoint 2007データベース(SP)をホストします。SPコンテンツデータベース内の使用率の高い1つのテーブルに対して、多数のSELECT / INSERTデッドロックが発生しています。関連するリソースを絞り込みました。両方のプロセスで非クラスター化インデックスのロックが必要です。INSERTはSELECTリソースでIXロックを必要とし、SELECTはINSERTリソースでSロックを必要とします。デッドロックグラフは、3つのリソースを示しています。1)SELECT(プロデューサー/コンシューマーパラレルスレッド)からの2つ、および2)INSERTです。確認のためにデッドロックグラフを添付しました。これはMicrosoftのコードとテーブルの構造であるため、変更を加えることはできません。 ただし、MSFT SPサイトで、MAXDOPインスタンスレベルの構成オプションを1に設定することを推奨していることを確認しました。このインスタンスは他の多くのデータベース/アプリケーション間で共有されているため、この設定を無効にすることはできません。 したがって、私はこれらのSELECTステートメントが並列にならないようにすることを試みました。これは解決策ではなく、トラブルシューティングに役立つ一時的な変更であることがわかっています。そのため、ワークロードが変更されていない(SELECT / INSERTが頻繁に発生する)にもかかわらず、デッドロックがなくなったにもかかわらず、「並列処理のコストしきい値」を標準の25から40に増やしました。私の質問はなぜですか? SPID 356 INSERTは、非クラスター化インデックスに属するページにIXロックを持っています SPID 690 SELECT実行ID 0は、同じ非クラスター化インデックスに属するページにSロックを持っています 今 SPID 356はSPID 690リソースのIXロックを要求しますが、SPID 690がSPID 690によってブロックされているため、それを維持 できません。 1はSPID 356によってブロックされており、デッドロックが発生しています。 実行計画は私のSkyDriveにあります 完全なデッドロックの詳細はここにあります 誰かが私になぜそれを本当に感謝するか理解するのを手伝ってくれるなら。 EventReceiversテーブル。 Id uniqueidentifier no 16 Name nvarchar no 512 SiteId uniqueidentifier no 16 WebId uniqueidentifier no 16 HostId uniqueidentifier no 16 HostType …

3
ユーザーはSSMSでデフォルト以外のスキーマのテーブルを表示できません
あるVIEW DEFINITIONユーザーのスキーマレベルで適切に権限を設定する際に問題が発生しました。スキーマTestSchemaを作成し、いくつかのテーブルを追加しました。ユーザーは、現在のアクセス許可は、アクセスに設定&(テーブルを変更しているSELECT、UPDATE、DELETEを介して、など)dbo_datareaderとdbo_datawriterロール。ただし、SSMSオブジェクトエクスプローラーでテーブルを表示することはできません。 定義を表示する権限を付与しようとしました: grant view definition on SCHEMA :: [TestSchema] to [User] それはうまくいきませんでした。テーブルレベルの権限を設定してみました: grant view definition on [TestSchema].[NewTable] to [User] それもうまくいきませんでした。それから私は全面的な助成金を試してみました: grant view definition to [User] そして、それはうまくいきました。これTestSchemaで、だけでなく、アクセスしてはならない他のスキーマも表示できるようになりました。 ここでの目標は、ユーザーが特定のスキーマ内のすべてのテーブルを表示できるようにすることです。どうすればそれを達成できますか?デフォルトでこれを実行できるようにする必要がある場合、なぜそれができないのかを見つけるためにどのようなアクセス許可を確認する必要がありますか?

1
暗号化されたデータベースを別のサーバーに復元する
私はSQLServer 2008で動作する製品を使用しています。当然のことながら、それを提供する会社はSQLServerサポートを提供していません。製品をインストールしたときに、データベースを暗号化するためのパスワードを指定しました。別のサーバーでテストするために、製品の別のコピーを実行したいのですが。データベースを別のサーバーに復元し、その別のサーバーに製品をインストールしました。インストール時に同じパスワードを入力し、メインサーバーからバックアップを復元しました。ただし、エラーメッセージが表示されます。 System.Data.SqlClient.SqlException: An error occurred during decryption. 製品から。SQLServer Management Studioを使用してテーブルにアクセスできます。 私はこれを試しました: 最初のサーバー: CREATE CERTIFICATE cert1 WITH SUBJECT = 'Certificate for my stuff' BACKUP CERTIFICATE cert1 TO FILE = 'd:\backup\cert1.dat' WITH PRIVATE KEY ( ENCRYPTION BY PASSWORD = 'mypassword', FILE = 'd:\backup\cert1_privatekey.dat' ) 2番目のサーバー: CREATE MASTER KEY ENCRYPTION BY PASSWORD …


4
T-SQL-条件が満たされるまでテーブルをループする最も効率的な方法は何ですか
の領域でプログラミングタスクを得ましたT-SQL。 仕事: 人々はエレベーターに乗りたいと思っています。 列に並んでいる順番で順番が決まります。 エレベーターの最大容量は1000ポンド以下です。 エレベーターが重くなる前にエレベーターに入ることができる最後の人の名前を返してください! 戻り型はテーブルでなければなりません 質問: この問題を解決する最も効率的な方法は何ですか?ループが正しい場合、改善の余地はありますか? 私はループと#一時テーブルを使用しました、ここで私の解決策: set rowcount 0 -- THE SOURCE TABLE "LINE" HAS THE SAME SCHEMA AS #RESULT AND #TEMP use Northwind go declare @sum int declare @curr int set @sum = 0 declare @id int IF OBJECT_ID('tempdb..#temp','u') IS NOT NULL DROP TABLE #temp …
10 sql-server  t-sql 

4
LIKE演算子で複数の値を選択する
以下に示すSQLクエリがありますlike。演算子を使用して複数の値を選択します。 私のクエリは正しいですか? SELECT top 1 employee_id, employee_ident, utc_dt, rx_dt FROM employee INNER JOIN employee_mdata_history ON employee.ident=employee_mdata_history.employee_ident WHERE employee_id like 'emp1%' , 'emp3%' ORDER BY rx_dt desc そうでない場合、誰かが私を修正できますか? テーブルには、'emp1'およびで始まる大量のデータがあり'emp3'ます。結果を上位3「emp1」と上位2「emp3」でフィルタリングできますrx_dtか?


2
SQL Server 2016の高アイドルCPUとクエリは非常に遅い
テスト用に、WinServer2012R2とSQL Server Express 2016を10日以上前にインストールしました。私はこのマシンの唯一のユーザーです。SQL Server 2005の.bakが250MB以下のデータベースは問題なく復元されます。マシンの再起動後、プロセス「SQL Server NT-64ビット」は0%のCPUを使用します。 数分または数時間後、SSMSのCPU使用率 "SQL Server NT-64ビット"からの単純なクエリ(更新/挿入なし!)が突然15%に急上昇し、アイドル状態でもそこにとどまります。その時点から、通常1秒もかからないクエリは、突然2分かかります。実際のクエリ中、CPU使用率は増加しません。この状態では、サーバーは実質的に使用できなくなります。 SQL Serverプロファイラーの接続のみに30秒以上かかります。自分のクエリ以外に、SQLServerCEIP / SQLTELEMETRYからのクエリはごくわずかしかありません(1分あたり最大3つ)。 SQL-Serverを再起動しても解決しません。CPU使用率は15%に戻ります。時間後でもSQL-Serverは回復しません。マシン全体を再起動するだけで問題が解決します。 これは「すぐに使える」インストールなので、小さなデータベースしかなく、クエリはほとんどなく、ユーザーとしての私だけで、おそらくロックはありません。通常のSQL-Serverパフォーマンスの問題に関する多くの記事は、多くのことについて語っていますここでは実際には適用されません。SQL-Serverはようだ独占的にいくつかの内部タスクに集中したいです。 これは、2 GBのRAMと2 GHzのデュアルXeonを備えた仮想マシンです。私はそれにVS2016も搭載しており、非常に高速です。ウイルス対策も、Windows Defenderもありません。もうここで遅れました。明日はsp_whoisactiveを試します。SQL-Serverは何をしているのだろうと本当に思っています... 1 GBの以前のマシンでは、同じDBがSQLServer2005の下で10年間問題なく動作しました... 私はSQLプロファイラーのエキスパートではありません。どこから探したらいいですか?

2
複数のタイプである可能性のある値を格納する最良の方法
より直接的かつ一般的な方法で質問を再質問したいと思います。 複数の異なるタイプの値を格納するテーブルをどのように作成しますか? 私の場合、値はイベントに関する診断を提供します。例:イベントが発生しました->イベントに関する関連情報を含む複数のPLCからの読み取り値を保存します。PLCは、あらゆるタイプのデータを監視できます。 私が考えることができるいくつかの例: 可能なすべてのタイプの列を作成し、使用する列を示す別の列を作成します 例:列:IntVal、StrVal、BoolVal、Type。値:null、null、True、「BOOL」 varcharとして値を保存します

3
SQL Serverでの連続するバックアップごとに.bakファイルのサイズが増加/倍増するのはなぜですか?
SQL Server 2012 Expressで単純なDBを実行しています。 ちょうど今日、データベースをバックアップすると、.bakファイルサイズは、直前のバックアップの数分前の2倍になります。今日、いくつかのバックアップを実行しました(SQL Server Management Studio->バックアップの種類:完全).bak。ファイルごとに2倍になっています。 SQL Server Mgmt Studioで、DBを右クリックすると、[レポート]-> [バックアップと復元のイベント]-> [成功したバックアップ操作]が展開されます。 ここのレポートは、最新のバックアップサイズが55MBと記録されていることを示してい.bakますが、実際のファイルに移動すると260MBです。今日の他の各バックアップも55MBのサイズとして記録されましたが、対応する.bakファイルは数倍大きくなっています(バックアップ操作ごとに増加しています)。 何がうまくいかないのでしょうか?これが始まって以来、データベースに変更を加えていません。

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

1
SQLHANDLEの無限再コンパイルの可能性が検出されました
私はSQLエラーログで奇妙なエラーメッセージを見つけてきました: Bocss:1時間ごとに同じデッドロックが発生–調査が必要 また、次の例のように、他のSPIDのエラーログに多くの再コンパイルがリストされます。 2015年9月4日14:30:10、spid64、Unknown、SQLHANDLE 0x0200000059631A288882589E0C54B76404CAE1B97E08D3680000000000000000000000000000000000000000 PlanHandle 0x0600040059631A2860A62B654100000001000000000000000000000000000000000000000000000000000000開始オフセット600200000010000000000000000000000000000000000000000000000000000000開始オフセット600200000010000000000000000000000000000000000000000000000000000000開始オフセット600200000010000000000000000000000000000000000000000000000000000000開始オフセット600400000009000000 、spid150、Unknown、SQLHANDLE 0x02000000EF886F018C4E0B163812B8B20150FE8FC7E6A06A0000000000000000000000000000000000000000 PlanHandle 0x06000400EF886F01901A816E0600000001000000000000000000000000000000000000000000000000000000開始オフセット998、最後のオフセット252015終了オフセット2.9 09終了オフセット25209 09終了オフセット25209 09終了オフセット2509 0930:09、spid163、不明、可能無限の再コンパイルがSQLHANDLE 0x02000000E7C7BF0E5D70DE55759C7842860272AD474D69AB0000000000000000000000000000000000000000 PlanHandle検出された可能無限の再コンパイルは、最後の再コンパイルの理由2. 2015年9月4日14れた2652終了オフセット1064オフセット開始SQLHANDLE 0x0200000057C4C632D9052275CFF2B683B80F29501EE91D730000000000000000000000000000000000000000 PlanHandle 0x0600040057C4C63200EAC2BE3000000001000000000000000000000000000000000000000000000000000000検出されました0x06000400E7C7BF0EF0EB68A52C00000001000000000000000000000000000000000000000000000000000000開始オフセット1028終了オフセット2580。最後の再コンパイル理由は2でした。 何が原因でしょうか? キャッシュにプランがもうないようです。 この投稿のアドバイスに従って http://www.sqlservercentral.com/Forums/Topic1479420-146-1.aspx 次に、安全対策によりフルテキストカタログが無効にされたため、これには違いがなかったため、変更を完全にロールバックしました(新しいオブジェクトをドロップしたなど)。これでも違いはありませんでした。結局、SQLインスタンスの再起動がそれを止めるように見えた唯一の事柄であり、これが問題を即座に解決しました。 これも私を整理しました、しかし、私はまだ最初にこの混乱を引き起こした原因を見つける必要がありますか?

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 …

1
一括挿入後に外部キーが信頼できなくなる
2012互換モードのデータベースを備えたSQL 2014エディションサーバー(12.0.2430.0-SP1はまだありません)(2014に切り替えられるように取り組んでいます...)not trustedデータベースのように一貫してマークされている少数の外部キーオブジェクトがあります。私はそれらをドロップしてNOCHECKオプションなしで再作成しましたが、5〜10分以内に再び信頼できなくなり、CREATEスクリプトを生成すると次のようになります。 ALTER TABLE [dbo].[Points] WITH NOCHECK ADD CONSTRAINT [FK_BadgeId] FOREIGN KEY([BadgeId]) REFERENCES [dbo].[Badge] ([Id]) GO 使用されている作成スクリプトは次のとおりです。 ALTER TABLE [dbo].[Points] ADD CONSTRAINT [FK_BadgeId] FOREIGN KEY([BadgeId]) REFERENCES [dbo].[Badge] ([Id]) GO ALTER TABLE [dbo].[Points] CHECK CONSTRAINT [FK_BadgeId] GO レプリケーションはなく、サードパーティのツールもありません。データベース上のすべてのDDLステートメントを監視しているため、別のユーザーではありません。 私は制約を細かくチェックできます(WITH CHECK CHECKそれぞれで使用)が、その後すぐに信頼できなくなります。実行される保守ジョブのみが午前AMのOlaであり、これは1日中行われます。 更新: したがって、可能性を絞り込むためにいくつかのトレースを行った後、それBULK INSERTが原因でFKが信頼されなくなる可能性があります。このmsdnの質問は、これがキーが信頼されなくなるための有効なルートであることを示しています。これは私が聞いた最初のルートです。 だから私の質問は、BULK INSERT外部キーのis_trustedステータスを維持できる使用する代替戦略はありますか?1時間に数回実行されるアプリケーションのコンテキストで実行されています。代わりに、開発者に挿入ステートメントをバッチ処理させることもできますが、BULK INSERT必要がない場合は、最終通告を使用しないようにします。

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