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

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

1
10億行を処理してカウントするためのデータベース設計
リアルタイムのGPSデータを約5000 prのレートで受信します。分(4つのTCPサーバーから)。各サーバーは単一の接続を使用してデータを挿入し、挿入と挿入の間でデータをバッファーします。15分ほどごとに、サービスがこのデータをフェッチし、それをトリップに処理します。旅行が生成されたら、実際のGPSデータは通常、それほど重要ではありません。ユーザーが地図上でルートを確認したい場合のみです。 問題は、データベースが挿入されるデータの速度に追いつくのに苦労しているように見えることです。負荷が増加すると、挿入時間が急激に増加し(> 30秒)、その結果、より多くのデータをバッファリングできるようになり、その結果、挿入が大きくなり、挿入時間が長くなります。 現在のデザイン、パフォーマンスを改善するために必要ないくつかのアイデア、いくつかの質問への回答、および人々が持っている可能性のあるその他のヒントについて、いくつかコメントをいただければ幸いです。 現在のデザイン 現在、データは1週間を表すテーブルに分割されており、1年以上経過したデータはセカンダリデータベースにアーカイブされます。挿入と読み取りの両方に使用される編集可能なビューで全体が結合されます。 テーブルデザイン Id(PK、uniqueidentifier) DeviceId(FK、int) PersonId(FK、int) VehicleId(FK、int) TokenId(FK、int) UtcTime(PK、datetime2(3)) 緯度(float) 経度(float) 速度(smallint) 見出し(smallint) 衛星(tinyint) IOData(varbinary(100)) IgnitionState(tinyint) UserInput(tinyint) CreateTimeUtc(datetime2(3)) 指数 DeviceId_CreateTimeUtc_Desc DeviceId_UtcTime_Desc(クラスター化) PersonId_UtcTime_Desc TokenId_UtcTime_Desc VehicleId_UtcTime_Desc 現在、毎週、インデックスを含めて約10 GBを占めています。現在、メインデータベースには約300 GBのデータがあります。 メインデータベースのデータテーブルには、1つのファイルを持つ独自のファイルグループがありますが、メインデータベースの他のすべてのテーブルと同じディスク上にあります。セカンダリデータベースは別のディスクにありますが、同じマシン上にあります。 新しいテーブルパーティション(週)が使用されるときに、インデックスの再構築ジョブも毎週実行していると思います。縮小は行われません。 マシンは12 GBのメモリを搭載した8コアHPであり、メインデータベースを保持するディスクはRAID 10を実行しています。 アイデア プライマリデータベースに保存されるデータの量を、たとえば最大1か月に制限します。少なくとも、データベースをバックアップ/復元用に管理しやすくなりますが、これによりパフォーマンスの向上が見込めますか? 現在のデータのファイルグループに2つのファイルを作成し、それらを2つの異なる物理パーティションに配布する 現在のデータを保持するマスタースレーブデータベースを作成して、挿入と読み取りが異なるデータベースで実行されるようにする 現在のデータのファイルをSSDディスクに配置します(ミラーリングによりSSDディスクとのパフォーマンスに違いが生じますか?) さらに情報が必要な場合はお知らせください。パフォーマンスに影響を与える恐ろしいほど多くの要因があり、おそらくそれを調整する多くの方法があります。

2
AlwaysOn可用性グループの自動フェールオーバーが機能しない
AGセットアップで遊ぶ私はWSFCを起動し、DevClusterOnlineと呼ばれる1つの可用性グループの2つのノードで構成しています。両方のノード(DEV-AWEB5プライマリ、DEV-AWEB6セカンダリ)はWindows Server 2008 R2を実行しています。 AGの状態をチェックすると、次のようになります。 以下のクエリを実行すると、この結果セットが返されます。 select ar.replica_server_name, availability_group_name = ag.name, ar.availability_mode_desc, ar.failover_mode_desc from sys.availability_replicas ar inner join sys.availability_groups ag on ar.group_id = ag.group_id order by availability_group_name, replica_server_name; DEV-AWEB5を切断すると、グループリスナー(DevListener)に接続できませんが、pingを実行すると、pingに応答します。レプリカ-DEV-AWEB6はRESOLVING状態になり、私のDBにアクセスできません。ただし、手動でManagement Studioに移動し、フェールオーバーをDEV-AWEB6に設定すると、再び起動して実行され、DevListenerがもう一度接続を受け入れます。 これらの事実がフェイルオーバーが実際に機能していることを確認していること、コミットを同期して自動フェイルオーバーを構成していることを考えると、セットアップで誤動作した場合はどうなるかわかりません。 DEV-AWEB5を切断すると、レプリカが接続を保持し、DevListenerも保持されることを期待しています。自動フェイルオーバーにより、AGリスナーに透過的に接続できると思います。エンドユーザーの観点から見ると、Webシステムを使用している場合、DBサーバーの1つがダウンしたことは気付かないはずです。 私はここで立ち往生しています、誰かが私が間違っていることを教えてくれますか?

3
一度に1文字を取り除く値のループ
値をループして、値から一度に1文字を削除し、結果を表示したいと思います。 したがって、値を持つテーブルがある場合: ID ___ 34679 13390 89906 結果はこのようにしたい Id ---- 4679 679 79 9 3390 390 90 0 9906 906 06 6

4
SQL Server 2012コピーデータベースが失敗しました
同じSqlServerにデータベースのコピーを作成したい。そのため、データベースコピーウィザードを使用すると、エラーがスローされます。 設定: saユーザー メソッド:「SQL管理オブジェクトメソッドを使用する」 宛先データベースの新しい名前を選択しました。 エラー: TITLE:データベースコピーウィザード ジョブは失敗しました。詳細については、移行先サーバーのイベントログを確認してください。 ------------------------------ボタン: OK イベントログ: システム プロバイダー [名前] SQLSERVERAGENT イベントID 208 [修飾子] 16384レベル3タスク3キーワード0x80000000000000 TimeCreated [SystemTime] 2014-05-07T06:23:11.000000000Z EventRecordID 123672 Channel Application Computer Server1 Security EventData CDW_Server1_Server1_3 0x666DE807F406D7438C65B09171211D7B Failed 2014-05-07 10:52:50ジョブが失敗しました。ジョブはユーザーsaによって呼び出されました。実行する最後のステップは、ステップ1(CDW_Server1_Server1_3_Step)でした。 ログファイルの最後の行: OnProgress、Server1、NT Service \ SQLSERVERAGENT、Server1_Server1_Transfer Objects Task、{066BD090-26F3-45D8-AD60-B207D56D44CE}、{1CF7B713-F747-45FB-8936-5522651E0C7A}、5/7/2014 10:08:46 AM、5 / 7/2014 10:08:46 AM、0,0x、1データベースのデータベース転送に失敗しました。OnProgress、Server1、NT Service \ …

1
Azure SQLデータベースの不明な_TransactionIndexテーブル
今日気付いたのは、 "_ TransactionIndex_ {guid}"という名前のランダムなテーブルがAzure SQLデータベースにあることです。 1つの列IDがあり、8つのGUIDが含まれています。 このテーブルに関する情報が見つかりませんでした-それは何ですか?アプリケーション内のトランザクションに問題があるということですか?

2
多くのタイムゾーンのデータに対してレポートするためのデータウェアハウスの設計
多くのタイムゾーンのデータに対するレポートをサポートするデータウェアハウスの設計を最適化しようとしています。たとえば、アクティビティを1日の時間でグループ化して表示する必要がある、1か月分のアクティビティ(数百万行)のレポートがあるとします。そしてもちろんその日の時間は与えられたタイムゾーンの「ローカル」時間でなければなりません。 UTCと1つの現地時間をサポートしたときにうまく機能するデザインがありました。UTCおよび現地時間の日付と時刻のディメンションの標準設計、ファクトテーブルのID。ただし、100以上のタイムゾーンのレポートをサポートする必要がある場合、そのアプローチは拡張されないようです。 ファクトテーブルは非常に広くなります。また、レポートの特定の実行でグループ化に使用する日付と時刻のIDを指定するSQLの構文の問題を解決する必要があります。おそらく非常に大きなCASEステートメントでしょうか? カバーしているUTC時間範囲ごとにすべてのデータを取得し、それをプレゼンテーションレイヤーに戻してローカルに変換してそこで集計するといういくつかの提案を見てきましたが、SSRSを使用した限られたテストでは、非常に遅くなることが示唆されています。 私はこの主題についてもいくつかの本を調べましたが、それらはすべて、UTCがあり、ディスプレイで変換するか、UTCと1つのローカルがあると言っているようです。任意の考えや提案をいただければ幸いです。 注:この質問は「データマート/倉庫でのタイムゾーンの処理」に似ていますが、その質問についてはコメントできません。 更新: Aaronが重要な更新を行い、サンプルコードと図を投稿した後、私はAaronの回答を選択しました。彼の回答に対する私の以前のコメントは、回答の元の編集を参照しているため、あまり意味がありません。必要に応じて戻ってきてこれをもう一度更新しようとします

3
明示的な主キーがないDB内のすべてのテーブルを見つけるにはどうすればよいですか?
Googleの検索により、クラスター化インデックスなしでテーブルを検索する方法に関する数百万のヒットが発生しました。PKは通常、テーブルのクラスター化インデックスです。ただし、テーブルには、クラスター化インデックスとしての自然キー、およびID列のような非クラスター化代理インデックスを簡単に含めることができます。 主キーが定義されていないDB内のすべてのテーブルを見つけるにはどうすればよいですか?このDBには245のテーブルがあります。手動での検査は非常に非効率的です。

1
クエリのパフォーマンスが悪い
処理するデータ量に応じて、通常0.5〜6.0秒で実行される大きな(10,000行以上)手順があります。過去1か月間で、FULLSCANで統計を更新してから30秒以上かかりました。速度が低下すると、sp_recompileは問題を「修正」し、夜間統計ジョブが再度実行されるまで待機します。 低速と高速の実行プランを比較することで、特定のテーブル/インデックスに絞り込みました。実行速度が遅い場合は、特定のインデックスから約300行が返されると推定され、実行速度が速い場合は1行と推定されます。実行速度が遅い場合はインデックスでシークを行った後にテーブルスプールを使用し、実行速度が速い場合はテーブルスプールを実行しません。 DBSS SHOW_STATISTICSを使用して、インデックスヒストグラムをExcelでグラフ化しました。私は通常、グラフがより「ローリングヒル」であると予想しますが、代わりにそれは山のように見え、最高点はグラフ上の他のほとんどの値よりも2倍から3倍高くなります。 FULLSCANなしで統計を更新すると、より正常に見えます。その後、もう一度FULLSCANで実行すると、上記のように見えます。 これは、パラメータスニッフィングの問題のように感じられ、特に上記の(一見)奇妙なインデックス分布に関連しています。 プロシージャはテーブル値パラメーターを受け取りますが、パラメーター値パラメーターでパラメーターのスニッフィングを行うことができますか? 編集:プロシージャは、他に12個のパラメーターも受け取ります。そのうちのいくつかはオプションで、そのうちの2つは開始日と終了日です。 ヒストグラムは奇妙ですか、それとも間違ったツリーを吠えていますか? クエリを調整したり、インデックスを調整したりすることは確かに快適です。それがすばらしい修正である場合、その時点での私の質問は、歪んだヒストグラムについての詳細です。 これはPK IDENTITYクラスター化インデックスであることを述べておきます。互いに通信する2つのシステムがあり、1つはレガシーシステムで、もう1つは新しい自家製システムです。どちらのシステムも同様のデータを保存します。新しいシステムのこのテーブルのPKを同期させるために、古いシステムにデータが追加されない場合でも(RESEEDが実行された場合でも)、PKが増加します。したがって、この列の番号付けにいくつかのギャップがある可能性があります。レコードが削除されることはほとんどありません。 どんな考えでも大歓迎です。より多くの情報を収集/含めることができて、とてもうれしいです。


2
並列処理のコストしきい値をいつ変更するか
パフォーマンスの問題を調査しているときに、CXPACKETSへの流入があり、並列処理のコストしきい値と、おそらくMAXDOPを調べる必要があるかもしれないと示唆しています。 MAXDOPに大幅な変更を加える前に、SQL Server 2008のCXPACKET Waitsパフォーマンスチューンへの回答での@mrdennyの回答や、CXPACKET待機への対処からの@ aron-Bertrandの回答-コストしきい値の設定など、他の多くのアドバイスに従っています平行性について。統計情報を毎晩完全に更新するために、メンテナンスに追加しました。これは賢明な動きのように感じます。 ただし、コストのしきい値に変更を加えることはまだ私を悩ませるものです。 並列処理のコストしきい値はどの時点で変更する必要がありますか?(クエリとワークロードのコストを調べた後)このコストに変更を加えた例はありますか? これが前の質問で回答されたものである場合は謝罪します。 ありがとう!

1
80M行のインデックス付きテーブルで挿入クエリを実行するとMSG 666
奇妙なことに、私のストアード・プロシージャーは、一部の入力データについてメッセージ666を受け取り始めました。 次の構造を持つテーブルに行を挿入しようとすると、最後のステップでストアドプロシージャが失敗します。 Columns: A_Id: PK, int B_Id: PK, FK, int C_Id: PK, FK, int D_Id: PK, smallint これは基本的に、参照されるすべてのエンティティを接続するテーブルです。 Indexes: IX_TableName_D_id - Clustered index on D_id column PK_TableName - Unique non-clustered index on all columns (A_Id, B_Id, C_Id, D_Id) 両方のインデックスの断片化は低い(25%未満)。ただし、テーブルに対する操作の量が非常に多いため、PK_TableNameの断片化は急速に増大します。 テーブルサイズ: Row count: ~80,000,000 rows したがって、veeery simpleクエリを実行しようとすると、一部のD_Idに対して次のメッセージが表示されます。 メッセージ666。パーティションID 422223771074560のインデックスで、重複グループのシステム生成の一意の最大値を超えました。インデックスを削除して再作成すると、これが解決する場合があります。それ以外の場合は、別のクラスタリングキーを使用します。 クエリ例: INSERT …

1
UNPIVOTに動的に列名を渡す
次のデータを含むテーブルがあります First Second Third Fourth Fifth Sixth 2013-08-20 2013-08-21 2013-08-22 2013-08-23 2013-08-24 2013-08-25 そして使用 UNPIVOT SELECT Data ,DATENAME(DW, Data) AS DayName FROM Cal UNPIVOT(Data FOR D IN ( First, Second, Third, Fourth, Fifth, Sixth )) AS unpvt 次の結果が得られます Data DayName 2013-08-20 Tuesday 2013-08-21 Wednesday 2013-08-22 Thursday 2013-08-23 Friday 2013-08-24 Saturday …

3
データベースサイズ-MDFが大きすぎますか?
約2.9TbのデータをホストするSQL Server 2005データベースを維持しています(2 x 1.45Tb-RAWスキーマとANALYSISスキーマがあるため、基本的にデータの2つのコピーが取り込まれます)。リカバリモデルはシンプルで、6 .ldfGBです。 何らかの理由で、.mdf7.5Tbです。現在、ANALYSISテーブルには2〜3列しか追加されておらずNVARCHAR(MAX)、私が誤って理解している可能性があるため(間違っている場合は修正してください)、追加のスペース割り当てを引き起こしている可能性がある列は多くありません。これは、データベースを圧縮した直後です。その前は、約9 TBでした。何かご意見は? そして、追加の質問がある場合はお知らせください-私はデータベース管理と最適化の取り組みに非常に慣れていません(私は通常、仕事のこの側は行いません:))。 どうもありがとう! アンドリヤ


2
SQL Server 2012を2008 R2が既にインストールされているマシンにインストールできますか?
私はかなり前からSQL Server 2008 R2を使用していますが、うまく機能しています。SQL Server 2012を使用する必要があります。これは既存のデータベースに影響しますか?SQL Server 2008 R2が実行されているマシンにSQL Server 2012をインストールする場合、どの程度のリスクが伴いますか?

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