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

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

1
SQL Serverの行ごとのアクセス
そのように構造化されたテーブルがあります(簡略化) Name, EMail, LastLoggedInAt SQL Server(RemoteUser)に、LastLoggdInAtフィールドがnullではないデータ(選択クエリ経由)のみを表示できるユーザーがいます。 できるように見える?出来ますか?

1
2,135,044,521行テーブルのインデックスを最適化する
大きなテーブルでI / Oの問題があります。 一般的な統計 このテーブルには次の主な特徴があります。 環境:Azure SQLデータベース(階層はP4プレミアム(500 DTU)) 行:2,135,044,521 使用済みパーティション1,275 クラスター化およびパーティション化されたインデックス 型番 これはテーブルの実装です: CREATE TABLE [data].[DemoUnitData]( [UnitID] [bigint] NOT NULL, [Timestamp] [datetime] NOT NULL, [Value1] [decimal](18, 2) NULL, [Value2] [decimal](18, 2) NULL, [Value3] [decimal](18, 2) NULL, CONSTRAINT [PK_DemoUnitData] PRIMARY KEY CLUSTERED ( [UnitID] ASC, [Timestamp] ASC ) ) GO ALTER …

2
15分ごとにトランザクションログのバックアップを取ると、6時間ごとのログバックアップよりも多くのディスク領域が消費されますか?
私たちの環境では、ネットワークストレージの空き容量が少なくなっています。同時に、トランザクションログのバックアップを、6時間ごとではなく、15分ごとに行うようにしたいと思います。私の質問は、ログのバックアップ間隔を6時間から15分ごとに変更すると、より多くのディスク容量が消費されるのでしょうか。

1
データベースがRESTORING状態で止まっている根本的な原因を特定する
データベースがスタックRESTORING状態になるという問題を解決する質問があることを知っており、それらのソリューションを使用してデータベースを手動でオンラインに戻しましたが、私のシナリオは多少異なります。 本番環境のコピーをDEVインスタンスに復元するPowershellスクリプトを使用した自動復元があります。スクリプトは約1年間変更されず、復元プロセスが終了するRESTORINGこともありますが、復元されたデータベースが停止した状態になることがあります(スクリプトが正常に機能することもあれば、このように失敗することもあります)。 プロセスを手動で再実行するか、SSMSのユーザーインターフェイスまたはT-SQLを使用してデータベースを手動で復元するたびに、問題なく完了します。 CHECKDB復元されたDBで実行することを推奨する回答を見つけましたが、この問題の原因として何も出てきませんでした。 復元スクリプトはデータベースの完全バックアップを復元し、"WITH RECOVERY"オプションを使用するため、実際にはを使用して復元しているのに、復元プロセスを停止している可能性があるものを見つけようとしています"WITH RECOVERY"。 私はこれが時々起こっている理由を理解しようとすることに行き詰まっているので、どんな提案も本当に感謝しています。 症状を治療するのではなく、問題の根本的な原因を解決したいと思います。つまり、手動でDBを再度復元することです。 更新: @Brentが推奨するGithub Gist- こちら。

4
SQL Serverクエリストア-「アドホック」クエリとは何ですか?
私はSQL Serverクエリストアについて詳しく調べており、「アドホック」クエリへの参照をよく目にします。ただし、クエリストアがアドホッククエリを決定する方法を確認していません。パラメータのないクエリまたは1回だけ実行されたクエリであると推測できる場所を見てきました。このための正式な定義はありますか?一般的な意味ではありません。つまり、クエリストアに関連しています。 例として、このページはクエリストアからアドホッククエリを削除する例を示していますが、使用している条件は実行カウントが1つしかないようです。これは、アドホッククエリの奇妙な定義のようです。ところで、ページに移動する場合は、「アドホッククエリの削除」を検索してください。

1
誰が私のワーカースレッドを使用していますか?SQL Server 2014-HADR
最近、SQL Server 2014 HADR環境で問題が発生し、サーバーの1つでワーカースレッドが不足しました。 メッセージを受け取りました: AlwaysOn可用性グループのスレッドプールは、利用可能なワーカースレッドが十分にないため、新しいワーカースレッドを開始できませんでした。 問題を分析するのに役立つ(と思った)ステートメントを取得するために、別の質問を既に開いています(どのSPIDがどのスケジューラー(ワーカースレッド)を使用しているかを確認できますか?)。システムを使用しているスレッドを見つけるためのクエリを取得しましたが、サーバーがワーカースレッドを使い果たした理由がわかりません。 私たちの環境は次のとおりです。 4 Windows Server 2012 R2 SQL Server 2014エンタープライズ 24プロセッサ-> 832ワーカースレッド 256 GB RAM 12個の可用性グループ(全体) 642データベース(全体) したがって、問題が発生したサーバーには次の構成がありました。 5つの可用性グループ(3つのプライマリ/ 2つのセカンダリ) 325データベース(127プライマリ/ 198セカンダリ) MAXDOP = 8 Cost Threshold for Parallelism = 50 電源プランは「高パフォーマンス」に設定されています この問題を「解決」するために、1つの可用性グループをセカンダリサーバーに手動でフェールオーバーしました。そのサーバーの構成は次のとおりです。 5つの可用性グループ(2つのプライマリ/ 3つのセカンダリ) 325データベース(77プライマリ/ 248セカンダリ) 私はこのステートメントで利用可能なスレッドを監視しています: declare @max int select @max = …

2
関連しない列は、selectステートメントのクエリ時間に影響しますか?
気になるだけです。 100万レコード/行のテーブルがあるとします。 select order_value from store.orders そのテーブルに実際のクエリ時間で1つのフィールド、2つのフィールド、または100のフィールドがあるかどうかに違いはありますか?「order_value」以外のすべてのフィールドを意味します。 現在、私はデータウェアハウスにデータをプッシュしています。「将来、いつか使用される可能性がある」フィールドをテーブルにダンプすることがありますが、現時点では、何も照会されていません。これらの「無関係な」フィールドは、それらを含まないselectステートメントに直接または間接的に影響しますか(いいえ*意味します)?

1
Pythonで取得したSQL Server VARCHAR列のエンコードの問題
最近、SQL Serverでvarchar(120)として保存されているフィールドに関連するエンコーディングに問題がありました。SSMSでは、varcharは次のように表示されます。 「ジョンベンを殺したのは誰?」 ただし、Pythonに取り込むと、次のようになります。 私はこれをPython側から調査しましたが、奇妙なことは何も起こっていません。私の理論では、SQL Serverのvarcharは、PythonではSSMSとは異なる方法で表示されるUTF-8文字を受け入れます。SQL Serverでのエンコードについてはあまり詳しくありません。誰かが私に次のことを知らせてくれますか? SSMSでvarcharのエンコーディングを表示する方法はありますか?たとえば、現在SSMSからのコンマを表示する代わりに、\ x82を参照してください。 SQL Server 2008を使用しています。インポート/エクスポートツールを使用したり、フラットファイルにダンプしたりせずに、UTF-8文字のエンコードをASCII文字に変更する方法はありますか?つまり、クエリを介してこの変換を行うことができますか? クエリを介してプログラムで問題のあるレコードを特定する方法はありますか(問題は、ASCIIではサポートされていないUTF-8文字として定義されています)。 前もって感謝します! 使用sp_help N'table_name';して、このVARCHAR列の照合順序は次のとおりSQL_Latin1_General_CP1_CI_ASです。


1
READPASTヒントにより、インデックス付きビューが無視されるのはなぜですか?
このREADPASTヒントを使用して、アプリケーションの金融サブシステムのリソースロックを削減することを調査しています。 金融取引記録は追加されるだけで、更新または削除されることはないため、良い方法のように思えました。スキップされる行は、トランザクション内に挿入された新しい行のみです。トランザクションがコミットされるまで、それらは事実上外界には存在しません。 ただし、READPASTヒントを付けたインデックス付きビューを使用するクエリのパフォーマンスが低下していることに気付きました。クエリプランを比較すると、ヒントのように見えます。クエリオプティマイザーは、インデックス付きビューを使用しないことを選択し、代わりに通常のビューのように扱います。 それがなぜかはわかりません。インデックス付きビューは、操作中にキーをロックでき、追加READPASTも同様に機能するという点で、他のインデックスと同じだと思います。 SELECT TOP 1 isa.InvoiceId FROM Financial_InvoiceSummaryAmounts isa WITH (READPAST) WHERE isa.TotalOwedAmount = 0.0 SELECT TOP 1 isa.InvoiceId FROM Financial_InvoiceSummaryAmounts isa WHERE isa.TotalOwedAmount = 0.0 NOEXPANDヒントの追加も機能するようですREADPASTが、クエリオプティマイザーがそもそもなぜ(完全な回答の一部として)選択したのか、おそらくその理由について詳しく知りたいと思います。

1
SQL Serverが複合列統計ヒストグラムを実行しないのはなぜですか?
SQL Serverには「マルチカラム統計」と呼ばれるものがありますが、それが意味するものとは異なります。 次のサンプルテーブルを見てみましょう。 CREATE TABLE BadStatistics ( IsArchived BIT NOT NULL, Id INT NOT NULL IDENTITY PRIMARY KEY, Mystery VARCHAR(200) NOT NULL ); CREATE NONCLUSTERED INDEX BadIndex ON BadStatistics (IsArchived, Mystery); これで、2つの統計が2つのインデックスで作成されています。 BadIndexの統計: +--------------+----------------+-------------------------+ | All density | Average Length | Columns | +--------------+----------------+-------------------------+ | 0.5 | 1 | IsArchived …

2
SQL Server 2014でのフルスキャンによる統計の更新では100%のCPUを使用し、2008 R2では15%を使用します
フルスキャンの更新統計では、SQL Server 2008 R2でCPUの20%を使用しているのに、同じテーブルで同様のハードウェア機能を使用しているのに、SQL Server 2014でCPUの100%を使用するのはなぜですか? 私はMAXDOP他のオプションを検討してきましたが、特に目立つものは何もありません。これを引き起こす可能性のある設定があることは承知していますが、設定は両方のデータベースで非常に似ています(たとえば、MAXDOP両方とも4で、両方に複数のコアがあります)。どちらもEnterprise Editionです。 これを説明できるSQL Server 2014とSQL Server 2008 R2で「異なる」ものはありますか?どちらのサーバーでも、メモリオプションは90%です。何を探すべきかについての考えはありますか? SQL Server 2008 R2 / SP3とSQL Server 2014 / SP2を使用する2台のサーバーで、フル(100%)スキャンによる統計更新を週に1回実行します。データベースの構造は同じです。2008 R2サーバーでは、2つの非常に大きなテーブルの統計の更新に数時間かかりますが、これは予想どおりですが、CPUは使用率全体で20%未満にとどまります。ただし、2014サーバーでは、CPUは約40分間100%になります。2014サーバーではテーブルが少し小さくなっています。SQLモニターの分析メニューを使用してこれを確認します。 2014 SQL ServerのOlaログファイルの出力は次のとおりです。CPUは、約2:10から2:45まで100%になります。 Date and time: 2017-06-24 02:10:20 Command: UPDATE STATISTICS [InVA].[dbo].[AuditField] [_WA_Sys_00000005_15502E78] WITH FULLSCAN Outcome: Succeeded Duration: 00:07:48 Date and time: 2017-06-24 02:18:08 Date …

3
100以上のクライアントDBからのデータを一元化されたレポートデータベースに統合する方法に関するアドバイスを探す
私は小規模な(従業員数50人まで)SaaS企業のSQL開発者(DBAまたはアーキテクトではありません)です。私は次の方法を理解する必要があります。 100以上のOLTPデータベースから運用レポートをオフロード これらのレポートを複数のクライアントデータベースのデータに対して実行できるようにする 将来的に分析ベースのソリューションを提供するように当社を位置づける トランザクションレプリケーション(特に多対1 /中央サブスクライバーモデル)、SQLサービスブローカー、ログ配布、変更追跡(CT)、および変更データキャプチャ(CDC)などのさまざまなテクノロジに関する記事をいくつか読んだことがあります。これは企業専用です)、どの経路が最適かはわかりません。 統合に関する専門知識をお持ちの方が、私たちと同様の設定に出会い、成功への道筋を示したり、役立つリソースに案内したりできることを願っています。 コストの制約により、このソリューションはSQL Server Standard Edition内で機能する必要があります。また、このソリューションは、小規模な組織内でサポート/維持するために合理的でなければなりません。 基本構成: 現在、100を超える個別のクライアントデータベースがあり、ほとんどがデータセンターのSQLサーバーに展開されていますが、一部はリモートアクセス可能なデータセンター内のクライアントサーバーに展開されています。これらはすべてSQL Server 2008 R2データベースですが、近日中にSQL 2016にアップグレードする予定です。 データベースプロジェクトとdacpacsを使用して、統合されるすべてのクライアントデータベースでスキーマが同じになるようにします。ただし、すべてのクライアントに同時に新しいバージョンへのアップグレードを強制するわけではないため、アップグレード間でスキーマが異なる場合があります。ソリューションは、クライアントAがソフトウェアバージョン1.0にあり、クライアントBがバージョン1.1にある場合に中断しないように十分に柔軟でなければなりません。 運用レポートは現在、各クライアントのOLTPデータベースから直接実行されます。これをオフロードしない場合、アプリケーションのパフォーマンスに与える影響を懸念しています。 高レベルの要件: 私たちのクライアントは、病院の無菌処理部門(SPD)で、これまでに処理したもの、在庫がある場所などに関する最新のレポートが必要です。SPDは、週末と休日を含め、24時間体制で在庫を処理します。この取り組みの主な目的の1つは運用レポートをより適切にサポートすることであるため、クライアントのニーズに対応し続けるために、データをできる限りリアルタイムに近づけることを望んでいます。 現在、実際には同じ病院システムの一部である個別のデータベースにいくつかのSPDがあります。これらのクライアントは、システム内のすべてのSPDに対してレポートを作成する機能を求めています。 戦略的に言えば、社内の分析イニシアチブをサポートするために、すべてのクライアントのデータを簡単に集約できる機能が必要です。収集した運用データをデータマート/倉庫のソースとして使用できることが期待されます。 これまでの考え: トランザクションレプリケーションは、最も「リアルタイム」なソリューションを提供するようです。この応答が特に役立つことがわかりましたが、スキーマの違いが生じる可能性があるため、SQL Serverの多対1レプリケーションが機能しないことを懸念しています。 クエリがアクティブな間はログを復元できないので、ログ配布は理想的に聞こえません。ログを復元できるようにするには、全員を追い出す必要があります。そうしないと、データが古くなります。この方法が複数のデータベースからのデータを一元化するために使用できるかどうかは不明です。出荷される各ログは、それが由来する個々のデータベースに関するもののみであるためです。 SQLサービスブローカーを使用する場合、キューが処理するメッセージの数に対応できなかった場合、レイテンシは予測できない場合があります。 CTは、各テーブル行のバージョンのみを識別します。レイテンシは、データを取得して中央リポジトリに挿入するために、各データベースに対してSSISパッケージのようなものをどれだけ速く処理できるかに依存します。 各データベースを個別にレプリケートすることを検討する必要があり、その後、ある種のデータ仮想化手法を使用して、さまざまなレプリケートされたソースからのデータを組み合わせる必要があるでしょうか。 あなたが提供したいアドバイスや指示があれば、大歓迎です。

3
format()は非決定的な組み込みの文字列関数です…
これに関するドキュメントの欠如に関する接続項目を投稿する前に、誰かが私がここで単に何かを見落としているのではないことを確認しますか? format文字列関数としてリストされているドキュメントページで: 「すべての組み込み文字列関数は確定的です。」- 文字列関数(Transact-SQL) format関連ページで非決定的であることについての言及もありません: 決定論的および非決定論的関数 FORMAT(Transact-SQL) ただし、永続的な計算列を作成しようとすると、次のようになります。 create table t (date_col date); insert into t values (getdate()); alter table t add date_formatted_01 as format(date_col,'YYYY') persisted; 次のエラーを返します。 列が非決定的であるため、テーブル 't'の計算された列 'date_formatted_01'は永続化できません。 ドキュメントには、 カルチャー引数が指定されていない場合、現在のセッションの言語が使用されます。 しかし、文化の議論を追加しても、状況は変わりません これも失敗します alter table t add date_formatted_02 as format(date_col, 'd', 'en-US' ) persisted rextesterデモ:http ://rextester.com/ZMS22966 dbfiddle.ukデモ:http ://dbfiddle.uk/?rdbms=sqlserver_next&fiddle=7fc57d1916e901cb561b551af144aed6
10 sql-server 

2
Tablockヒントがデッドロックをトリガーする
最小限のログを使用して、2つのデータセットを空のヒープテーブルに挿入しました。これは、次の形式のSQLで並列実行されている2つのSQL実行タスクを使用して行われました。 INSERT INTO Table (TABLOCK) SELECT FROM ... ジョブが少しハングした後、SQLタスクの1つがデッドロックの犠牲になりました。以下は、デッドロックグラフのXML出力です。 誰かが内部で何が起こっていたか説明できますか? <resource-list> <objectlock lockPartition="0" objid="1586156746" subresource="FULL" dbid="7" objectname="dbo.TargetTable" id="lock7374a00" mode="IX" associatedObjectId="1586156746"> <owner-list> <owner id="process9609dc8" mode="Sch-S"/> <owner id="process9609dc8" mode="IX"/> </owner-list> <waiter-list> <waiter id="process5e13048" mode="X" requestType="convert"/> </waiter-list> </objectlock> <objectlock lockPartition="0" objid="1586156746" subresource="FULL" dbid="7" objectname="dbo.TargetTable" id="lock7374a00" mode="IX" associatedObjectId="1586156746"> <owner-list> <owner id="process5e13048" mode="Sch-S"/> <owner id="process5e13048" …

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