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

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

1
トランザクションが「コミット」されている場合、確実に保存されますか?
トランザクションが正常にコミットされた場合、データベースとログファイルに書き込まれたことを100%確認できますか?データが保存されていることを確認できますか? 今日、ログファイルはドライブの制限に達し、多くのエラーが発生しました。さらに、他のいくつかのサービスがクラッシュしました。ディスクを増やし、サーバーを再起動しました。 起動時に、サーバーは「データベースの回復」を行いました。すべてが再び正常に動作することを確認できますか?


2
SQLプロファイラートレース(.trc)ファイルを読み取りおよび/または分析できるサードパーティのツールはありますか[クローズ]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、データベース管理者のStack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 DBAがデータベースの1つで行ったトレースからの.trcファイルがあります。PCにSQLプロファイラーツールがインストールされていないため、内容を表示したり、トレースログを分析したりすることはできません。SQLプロファイラーをPCにインストールせずにこのファイルを読み取るにはどうすればよいですか?
12 sql-server  trace 

2
MERGEはtempdbを使用しますか?
次のクエリを検討してください。 MERGE [Parameter] with (rowlock) AS target USING (SELECT @AreaId, @ParameterTypeId, @Value) AS source (AreaId, ParameterTypeId, Value) ON (target.AreaId = source.AreaId AND target.ParameterTypeId = source.ParameterTypeId) WHEN MATCHED THEN UPDATE SET target.Value = source.Value, @UpdatedId = target.Id WHEN NOT MATCHED THEN INSERT ([AreaId], [ParameterTypeId], [Value]) VALUES (source.AreaId, source.ParameterTypeId, source.Value); 統計I / …
12 sql-server  t-sql 

1
マージレプリケーションの誤った競合を適切にトラブルシューティングする方法
SQL Server 2008 R2マージレプリケーションのセットアップがあります。 最近、いくつかのテーブルで競合が発生し始めました。競合ビューアを確認すると、勝者と敗者の列の値が同じであることがわかります。 これらのデータは1人の加入者だけが入力していると確信しています。 使った sp_showrowreplicainfoは競合する行の詳細を取得していましたが、2つの行がありました。1つはパブリッシャー用、もう1つはサブスクライバー用で、両方の行の「バージョン」が1です。 また、ブランドンの方法を実装しました:Merge Replicationで変更を監査しますが、通常の挿入のみを示していました! この種の競合のトラブルシューティングを開始する方法を教えてください。

3
SQL Server 2008のメモリにキャッシュされているものを確認するにはどうすればよいですか?
SQL Server 2008 R2にキャッシュされているものを確認する方法はありますか?私は、次の素敵な記事を見つけました:http://blog.sqlauthority.com/2010/06/17/sql-server-data-pages-in-buffer-pool-data-stored-in-memory-cache。ただし、各テーブルとインデックスのデータ(パーセンテージやKBなど)がどれだけ保存されているかを知りたいと思います。そのようなデータを取得する簡単な方法はありますか?

2
MPIOではどのようなスループットを期待できますか?
2つの1 Gbps NICを備えたDell PowerEdge 2950は、スイッチ上の2つの1 Gbpsポートに接続され、1つの仮想インターフェイスとして存在する4つの1 Gbps NICを備えたNetAppに接続されます。24ドライブ、7200k SATA、NetApp RAID-DP。Microsoft iSCSIイニシエーターのMPIOを使用して、各ホストNICをNetAppにマップしました。SQLIOを使用したテストでは、書き込みスループットは約200 MBで妥当と思われますが、読み取りは100 MBに近くなります。 私の読み取りは、私の書き込みのように200 MBに近いはずではありませんか?これは構成の問題ですか、それとも理解できない根本的なストレージの問題がありますか? 更新:ランダムワークロードのIOPSは次のとおりです。読み取りは意味がありますが、書き込み用に20000をどうするかはわかりません。SANキャッシュは3.2 GBです。SQLIOテストは25 GBファイルに対するものです。
12 sql-server 

3
数百万件のレコードでテーブルを更新して、4日間でした
現在、数百万件のレコードでテーブルを更新していますが、4日間で、クエリはまだ実行中です。 クエリが実行されていることを示すアクティビティモニターを確認しました。 イベントログにエラーはまったくありません。 賢明なパフォーマンス: ディスクAのTempdb(850 GBの空き領域) ディスクBのデータベースファイル(750 GBの空き領域) 16 GBラム どうすればいいですか? クエリ UPDATE dbo.table1 SET costPercentage = ISNULL(t2.PaymentIndex, 1.0), t2.TopUp_Amt = (ISNULL(t2.PaymentIndex, 1.0) - 1.0) * ISNULL(dbo.table1.Initial_Tariff_Amt, 0.00), Total_Tariff_Inc_t2 = ISNULL(t2.PaymentIndex, 1.0) * ISNULL(dbo.table1.Initial_Tariff_Amt, 0.00) FROM dbo.table2 t2 WHERE LEFT(dbo.test1.procodet, 3) = LEFT(t2.ProviderCode, 3) COLLATE database_default

1
SQL Serverトランザクションバックアップとログ
中規模のビジネスクリティカルなSQL Server 2008データベースを継承し、バックアップ計画に頭を悩ませようとしています。(私はDBAではなく開発者です。) 現在のシステムのセットアップ方法には、2つのバックアップシステムがあります。 毎週の完全バックアップ(.bak)および1時間ごとのトランザクションログ(.trn)バックアップ。これらのバックアップは数セット保持され、定期的にオフサイトで出荷されます。 .ldf復旧モデルがに設定されたSQL Serverログ()Full。このファイルはメイン.mdfファイルとは別のドライブにありますが、それ以外の場合はバックアップされません。 緊急リストアの場合(または、バックアップを開発マシンにリストアする場合)、私の手順は.bakファイルを使用してから.trnファイルを適用することです。この手順を比較的簡単にするスクリプトがあります。 私の質問: .ldfファイルからデータベースを復元することは可能ですか?それは何のためですか? これらのトランザクションログの両方を保持することは不必要に冗長ですか? .ldfファイルをバックアップすることは重要ですか?

5
Azure SQL Databaseから不適切な実行プランを削除するにはどうすればよいですか?
DBCC FREEPROCCACHEAzure SQL DBでは機能しません。どうすれば、実稼働システムを傷つけないように計画を強制的にキャッシュから追い出すことができますか(つまり、テーブルを自由に変更することはできません)。これは特にEntity Frameworkによって作成されたSQL向けであるため、これらは自己管理型のストアドプロシージャではありません。事実上動的なSQLです。 (ソースは悪いインデックス->悪い統計などでした。それはすべて修正されましたが、悪い計画は消えません。) 更新: 彼が最初に到着したとき、@ mrdennyのソリューションを選択しました。ただし、@ Aaron Bertrandのスクリプトを使用して作業を正常に実行しています。みんな助けてくれてありがとう!!

3
連結物理操作:実行の順序を保証しますか?
標準SQLでは、aの結果のunion all順序は保証されていません。だから、次のようなもの: select 'A' as c union all select 'B' 任意の順序で2つの行を返すことができます(ただし、実際に知っているデータベースでは、「A」が「B」よりも前になります)。 SQL Serverでは、これは「連結」物理操作を使用した実行計画になります。 連結操作が入力をスキャンし、使用可能なレコードがある入力をすべて返すと簡単に想像できます。しかし、私はウェブ上で次の文を見つけました(ここ): クエリプロセッサは、計画に演算子が表示される順序でこの計画を実行します。最初の計画が一番上で、最後の計画が最後です。 質問:これは実際には本当ですか?これは真実であることが保証されていますか? Microsoftのドキュメントには、入力が最初から最後まで順番にスキャンされるという参照は見つかりませんでした。一方、実行しようとすると、結果は、入力が実際に順番に処理されていることを示唆しています。 エンジンが一度に複数の入力を処理する方法はありますか?私のテスト(定数よりもはるかに複雑な式を使用)は、並列対応の8コアマシン上で実行され、ほとんどのクエリは並列処理を利用しています。

2
「アーカイブされているが使用可能な」データのSQL Serverデータベース設計
「縮小」しようとするこの大規模なデータベース(1 TBを超える)があります。データベースは1つの主要なエンティティを中心に展開するため、「訪問」と呼びましょう。議論のために、それが医療行為のデータベースであるとしましょう。 手続き、年次、フォローアップ、予防接種など、合計30の訪問「タイプ」があり、それぞれが「visit_immuno」などの「Visit」への補助表です。 データベースには、2000年以降約12年間のデータが蓄積されています。「ライブ」バージョンに約3年間のデータを保持し、残りを「old_data」データベースに保持することを提案する人がいます。日付は正規化されているため、「Visit」テーブルにのみ保存されます。Visitテーブルには、ROWVERSION列とBIGINT疑似ID(クラスター化)列も含まれます。すべての意図と目的のために、クラスタリングキーにSEQUENCE(SQL Server 2012 Enterprise)が入力されているとしましょうcid。 visit.date医師がデータの彼の「ブリーフケース」を拡張訪問し、リターンになったとき、それはメインテーブルにマージされます例えば、クラスタリング・キーと同じ順序で常にではありません。また、「visit」テーブルにいくつかの更新があり、ROWVERSION列がcidとdate列の両方と同期しなくなります-簡単に言えば、この理由のために適切なパーティションキーを作成することもできROWVERSIONませんcid。 「ライブ」からデータを取り出すためのビジネスルールは、ということであるvisit.date36ヶ月よりも大きくなければなりませんし、子visit_paymentレコードが存在している必要があります。また、「old_data」データベースには、を除くベーステーブルは含まれていませんvisit%。 したがって、次のようになります。 Live DB(毎日使用)-すべてのテーブルOld-Data DB- visit%テーブルの古いデータ 提案では、2つのデータベースのテーブル全体でALLを結合するビュー(およびを除く)のすべてのベーステーブルに対するシノニムを含むシェルである結合DBが必要です。Live DBvisit%visit% 同じインデックスがOld-DataDBに作成されていると仮定すると、クエリはUNION-ALL ビューで適切に実行されますか?UNION-ALL ビューの実行計画をどのような種類のクエリパターンがトリップするか?

2
列定義の先頭または末尾に列エイリアスを配置することに違いはありますか?
私はいつも列エイリアスを次のように見て、書いてきました SELECT 1 as ColumnName しかし、今日使用したクエリに出くわしました SELECT ColumnName = 1 これら2つのクエリの実行方法に違いはありますか?または、どちらを使用するかについて、DBA間に標準はありますか? 個人的に私は、第二は、読み取り/(良い例を長い列定義に維持することが容易になるだろうと思いますここからこの記事私はすべきではない、いくつかの理由がある場合)、しかし、私は今日はとても疑問に思って前に使用第二構文を見たことがありませんそれを使用します。

3
孤立したユーザーを見つける
SQL Server 2005には、サーバーレベル(サーバーレベルで削除されたが、削除される前にデータベースから関連付け解除されなかったアカウント)に存在しないユーザーまたはリンクされていないアカウントを見つける方法があります(アカウントはサーバーレベルで削除されたが、データベースレベルではなく削除された可能性があるが、データベースレベルはクリーンアップされなかった)。 私は非常に乱雑なサーバーを持っているので、これらを見つけるために実行するクエリがあれば素晴らしいでしょう。

2
DMVを読み取るときにREAD UNCOMMITTEDを設定する
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTEDシステムDMVを読む前に何人かの人が電話するのを見てきました。同じトランザクションでDMVとテーブルへの呼び出しを混在させないと仮定して、これを行う理由はありますか?
12 sql-server  dmv 

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