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

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



2
ユニオンビューをより効率的に実行するにはどうすればよいですか?
私はパフォーマンスの理由でアクティブテーブルとアーカイブテーブルに分割し、直接フィールドマッピングを使用して、アーカイブプロセスを毎晩実行する大きなテーブル(数千から数億レコード)を持っています。 コード内のいくつかの場所で、アクティブテーブルとアーカイブテーブルを結合するクエリを実行する必要があります。ほぼ常に1つ以上のフィールド(両方のテーブルにインデックスを配置している)によってフィルター処理されます。便宜上、次のようなビューがあると理にかなっています。 create view vMyTable_Combined as select * from MyTable_Active union all select * from MyTable_Archive しかし、次のようなクエリを実行すると select * from vMyTable_Combined where IndexedField = @val でフィルタリングする前に、ActiveとStoreのすべてに対して結合を行う@valため、パフォーマンスが低下します。 ユニオン@valを作成する前に、ユニオンビューの2つのサブクエリを各フィルターで作成する賢い方法はありますか? それとも、私が目指していることを達成するために提案する他のアプローチがあるかもしれません。つまり、インデックス付きフィールドによってフィルター処理されたユニオンレコードセットを取得する簡単で効率的な方法ですか。 編集:ここに実行計画があります(そして実際のテーブル名がここに表示されます): 奇妙なことに、アクティブテーブルは実際には正しいインデックス(およびRID検索?)を使用していますが、アーカイブテーブルはテーブルスキャンを実行しています!

2
スナップショットアイソレーションを使用すると、SQL Serverデータベースの書き込みが遅くなりますか?
システムで多くのデッドロックが発生しています。 それらを修正するためにスナップショットアイソレーションを使用したいのですが、私のDBAはそれについて予約しています。 彼の懸念の1つは、スナップショット分離が書き込み速度を低下させることです。これは、キャッシュに書き込んでからTempDb(行バージョン)に書き込む必要があり、呼び出し元に戻ることができるためです。 「通常の」書き込みは、キャッシュに書き込むだけで実行できます。 これは行のバージョン管理のしくみですか?それともそれよりも複雑ですか?それはどういうわけかこれらを並行して行いますか? それともスナップショットアイソレーションでは書き込みが遅くなりますか?

3
クエリから取得できるデータを保持する新しいテーブルをいつ作成するかをどのように特定できますか?
支払い表があり、エージェントは支払いの手数料を受け取ります。コミッションは、支払いを取得するのにかかった時間など、いくつかの異なる要因に基づいているため、エージェントが取得するコミッション率を計算する際にはいくつかの計算が必要ですが、わいせつな複雑さはありません。 たとえば、おそらくこれより複雑になることはありません。 SELECT Payments.Amount * CASE WHEN DateDiff(year, Client.Received, Payments.DatePaid) = 1 THEN Rates.Rate1 WHEN DateDiff(year, Client.Received, Payments.DatePaid) = 2 THEN Rates.Rate2 ELSE Rates.Rate3 END 必要なときにいつでもクエリを実行するのではなく、このデータを保持する2番目のテーブルを作成するのは理にかなっていますか?それとも、要求されたときにデータをプルするランタイムクエリをそのまま使用する必要がありますか? さらに重要なことに、データが必要なときにクエリを実行する必要があるかどうか、またはデータを独自の別のテーブルに格納する必要があるかどうかを判断するときに使用する要素は何ですか?

1
sp_send_mailのデータベース権限に関する問題
データベースメールを送信しようとしていますが、取得していEXECUTE permission denied on the object 'sp_send_dbmail' database 'msdb', schema 'dbo'.ます。私が実行しているコードは次のとおりです: SELECT SUSER_NAME(), USER_NAME(); Create USER kyle_temp FOR LOGIN Foo EXECUTE AS USER = 'kyle_temp'; SELECT SUSER_NAME(), USER_NAME(); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Mail Profile', @recipients = 'test@test.com', @subject = 'Test', @body = 'Test' REVERT; DROP USER kyle_temp Fooログインは、msdbでFooユーザーにマッピングされていることを示しています。msdbでfooユーザーを見ると、 "DatabaseMailUserRole"がオンになっていて、dboでExecuteが実行されていることがわかりsp_send_dbmailます。 何が欠けていますか?

2
RFIDの適切なデータ型とは何ですか?また、フォーマットの標準的な定義はありますか?
靴に埋め込まれたRFIDタグに基づいて人々を追跡するデータベースがあります。このデータは、VARCHAR(MAX)他のデータが混じった列に到着し、特定の順序ではありません。これまでのところ、すべてのRFID値は次のようにフォーマットされています。 AnnnnnnnnAnnAAAA (where A = 0-9 and n = A-Z) これらのメッセージからRFIDを抽出し、それらを独自のテーブルに格納するためのレポートを書いています。RFIDが同じパターンに従っている限り、それらを見つけることができます。RFID形式が変更されると、抽出プロセスが失敗します。 RFIDタグの標準形式はありますか?RFIDタグの保存に最適なデータタイプはどれですか。 今は一緒にVARCHAR(20)行きます。

1
SQL Serverデータベース全体の統計を取得する最も効率的な方法
私がやろうとしていることは、データベースを確認してすべてのauto-shrink設定をロックし、どのデータベース/テーブルが非常に断片化されているかを把握することです。 データベースごとに良いアイデアを得るために実行できる特定のスクリプトはありますか? テーブルレベル(少なくともSQL Server 2005)で以下を実行できることはわかっています。 DBCC SHOWCONTIG ('DB.TABLE'); しかし、データベース内のすべてのテーブルを表示するために何を実行できますか? ありがとう

2
ミラーログはプライマリでは空ですが、ミラーでは問題ありません
私たちは何十もの主要サーバーとそれに対応するミラーを持っていますが、ほとんどは正常に機能していますが、そのうちの1つは奇妙な動作をしています。具体的には、sp_dbmmonitorresultsprocは特定のプリンシパルデータベースのすべての列をNULLとして返しますがsp_dbmmonitorresults、ミラーでは有効な情報を返します。 今、私はその原因が大まかにわかっています。プリンシパルサーバーとミラーサーバーがセットアップされたとき、プライマリの地域設定が正しくなかった(時刻は正しかったが、+ 4地域(アメリカなど)を使用していた)場合、ミラーリングが設定された後、時間地域はGMT +0に修正されました(学校少年のエラーは知っていますが、c'est la vie!) 編集:19/12/2012 今日、私はミラーリングを削除し、ミラー上のコピーを削除し、ミラーリングを再セットアップしましたが、これは問題を解決しませんでした!私はこの質問に賞金を払って、この問題の根底に到達しようとしています。 確認のため、EXEC sp_dbmmonitorresults @database_name = 'ProScript'各サーバーで手動で実行すると、プライマリのほとんどの値にNULLが返されますが、ミラーでは正常に返されます。 プライマリで実行した場合: ズーム:クリックしてフルサイズバージョン 鏡で走ったとき: ズーム:クリックしてフルサイズバージョン ご覧のとおり、時刻は現在でデータベースは同期していますが、log_generation_rate、unsent_log、send_rateなどはすべてプライマリでNULLになっていますか? 両方のサーバーは、exec sys.sp_dbmmonitorupdateジョブステップなどとして毎分実行されている監視ジョブを持っています。 sys.sp_dbmmonitorupdateのソースを確認すると、これらの値が取得されます。sys.dm_os_performance_countersしたがって、ミラーで次のコマンドを実行すると、 SELECT counter_name , cntr_value FROM sys.dm_os_performance_counters WHERE instance_name = 'ProScript' AND counter_name IN ( N'Log Send Queue KB', N'Log Bytes Sent/sec', N'Redo Queue KB', N'Redo Bytes/sec', N'Transaction Delay', N'Log …

5
SQLサーバーでの長時間のブロックを自動的に通知できますか?
週に1回程度、Access 2003フロントエンドからの長期にわたる読み取りロックが原因で、SQL Server 2005データベースのブロッキングチェーンを解決する必要があります。ロックは、ユーザーが特定のフォームを開くたびに解除され、ユーザーがフォームのスクロールを終了するか、フォームを閉じると解放されます。多くのユーザーがこのフォームを参照として開いているので、これらのロックはしばらく保持されます。テーブルを更新するとブロッキングが発生し、最初のロックを待機しているため、突然このテーブルから誰も選択できなくなります。多くのアプリがこのデータに依存しているため、これは私たちにとって非常に問題です。このロック動作は、リンクテーブルでのAccessの動作の一部であることを理解しています。 私はアクティビティモニターから問題を解決してきました。ヘッドブロッカーであるSELECTプロセスを見つけたら、そのプロセスを強制終了します。これは、手動で行うのに時間がかかるだけでなく、反応的であるためにも問題です。私がそれを聞いたときまでに、それは多くの人にとってすでに問題になっています。 これらの長期にわたるブロッキングチェーンを自動的にチェックする方法があり、メールで送信されるか、問題が自動的に解決されるかどうかを知りたいです。ロジックは単純明快です(「このSELECTクエリに一致するプロセスが1分以上ブロックされている場合は、通知/強制終了する」)が、SQL Serverでこれを実装する方法がわかりません。 価値があることについては、適切な解決策はアプリを修正または書き直すことだと思います。ただし、部局の政治上の理由により、これは今後数か月間は選択肢になりません。そのため、私は一時的なギャップを探しています。

4
単純なSQLクエリが完了しない[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 4年前休業。 質問の具体的な作り方はまだよくわからないのでよくわかりませんが、見過ごさないようになっているので、早めに質問したいと思います。 今週、データベースサーバーに問題が発生しました。これはデータの一貫性の問題のようであり、非常に単純なクエリや小さなテーブルでもタイムアウトによって明らかになります。今週初めにサーバーを再起動することで問題を「修正」し、サーバーはなくなりましたが、今では、より重要なテーブルでサーバーが戻ってきているようです。たとえば、私はいくつかの調査を行っただけで、次のようなクエリを見ています。 SELECT * FROM table WHERE id = 1234 特定のID。テーブルには約3,000万行以上あります。しかし、それはレコードのごく一部でのみ発生するようです。私はサーバーを再起動するか、別のサーバーにデータベースをバックアップおよび復元するときに、それはすべてうまくいくに違いない。でもやってみます。 この時点で、私は実行しています: DBCC CHECKTABLE ('table', NOINDEX) しかし、それは永遠に実行されるようです。初めて問題にぶつかったとき、問題のあるテーブルをチェックしたところ、問題はありませんでした。この新しいテーブルははるかに大きくなっています。 いくつかの背景技術情報: SQL Server 2008 R2、Windows Server 2008 R2 AWS / EC2、m2.2xlarge、32 GB RAM、4 x 1TB RAID 0 ほとんどディスクIOはありません。ほとんどのデータベースはメモリ内にあるようです 合計DBサイズ:100GB ELBボリュームは「新品」です。今週作成しました。 編集:私は次のコマンドを使用しました: SELECT sqltext.TEXT, req.session_id, req.blocking_session_id, req.wait_type, req.wait_time, req.last_wait_type, req.wait_resource, req.open_transaction_count, …

2
レポート目的でデータベーススナップショットを使用する利点
レポート目的でデータベースのスナップショットを使用することのパフォーマンス上の利点は何ですか? 私の見たところ、元のデータベースへの書き込みごとに、スナップショット自体に別の書き込みを行う必要があるため、おそらくパフォーマンスが低下します。 その時点までのデータのレポートを作成したいときはいつでもスナップショットを使用することがわかりますが、それはパフォーマンスのカテゴリに分類されません。 繰り返しますが、パフォーマンス上の利点はありますか?

4
SQL Serverのロックと同時実行性を理解するためのリソース
地雷のロックと同時実行性に関する最近の質問で実証されているように、ハードです。 中級から上級のSQL専門家がこれらについて徹底的に調査し、適切に学習することで、この領域に固有のすべての落とし穴をうまくナビゲートできるようにするための優れたリソースを提案できますか? チュートリアル、ブログ、マニュアルページ、PASSセッションなど、あらゆる種類のリソースを考えています。

2
SQL ServerにはDate_Format関数がありますか?
私が見つけたすべては、このDateFormatように、私が選択できる事前定義のリストです MySQL(およびPostgeSQLでも?)で覚えているように、日付形式を定義できます。 DATE_FORMAT(now(),'&m_%Y') --for 02_2012 etc. SQL Serverには同じ機能がありますか?そのようなことをするために人々は関数を書かなければならないのを見ます、それは組み込みのものを持っていますか? 編集: DatePart関数を見つけました。月を数値としてとることができますが、使用しても常に1桁を返します datePart(MM, getdate())

2
単位と複雑な単位変換に適した関係構造は何ですか?
私の会社はエネルギー業界に属しており、測定単位の変換を表す良い方法を考え出す必要があります。私はいくつかの検索を行ったが、必要な深さでこれをカバーする良い記事をまだ見つけていない。ユニット変換について公開されているほとんどの情報は、ユニット1が与えられた場合、ユニット2に到達するための既知の(ハードコードされた)変換率があり、それが単純な計算であることを前提としています(これは私が見つけた中で最も複雑な例で、まだ役に立ちません)。ただし、これは現実の世界では常に当てはまるわけではなく、処理しなければならないことについても当てはまりません。(長い記事で申し訳ありません-私はできるだけ多くの情報を提供しようとしています!) トリッキーな例1: $ 5をユーロに、またはその逆に変換するなど、一部の変換は時間とともに変化します。これはエネルギーとは何の関係もないように聞こえますが、実際にはエネルギー商品市場(株式市場を考えてください)に関係しています。 トリッキーな例2:( 過度に簡略化された)一部の天然ガスは他のものよりも熱く燃えます。さらに、天然ガスは、ガスのエネルギー(Thermsなど)またはガスの体積(MCFなどの1000立方フィート)に基づいて測定/保存でき、その他の可能性(たとえばトンのためのミサ)。ガソリンの類推は、87オクタン無鉛の1ガロンが、93オクタン無鉛の1ガロンよりも少ないエネルギーを提供することです。 トリッキーな例3: これらの測定単位があることに加えて、サームあたりの$またはMCFあたりの€などのレートも処理する必要があります。これらのレートで動作するようにいくつかの方法が必要で、どのように彼らは我々がから変換する必要がある場合に、ベースユニットに関連する我々はそうサームあたり$にMCFあたり€、我々はできるし、それからの変換と同じ公表レートを利用しサームにMCF。 トリッキーな例4: 以前は、「エネルギー」という用語を非常に緩く使用し、場合によっては誤って使用したことがあります。この時点で、そしてこれからは、状況が変わります。したがって、最後のカーブボールは、エネルギーとパワーの両方を扱うことです。電気の場合、これはkWH対kWを意味します(Yahoo Answersであるにもかかわらず、かなり良い説明です)。データの類推:ダウンロードしたデータの合計MBとMbpsを比較するようなものですISPが提供する帯域幅。データと同様に、エネルギーの供給には時間がかかります。データの類推を続けると、ある期間にわたって消費された平均有効帯域幅を計算する必要がある場合があるため、60MBが1分間にダウンロードされた場合、「有効」レートは60 * 8/60 = 8Mbpsになります。ここでの「トリック」は、Mbpsをユニットとして保存する場合、時間コンポーネントも含みますが、MBに直接関連付ける何らかの方法が必要であることです。幸いなことに、エネルギーから電力(またはその逆)への変換は、私たちが行う必要があるかなりまれなことです。そのため、私たちのソリューションは、他のすべてのトリッキーな例に合わせて最適化し、うまくいけば、この例も可能にする必要がありますが、関連する処理は行いません。エネルギー電源へのオプションです。 トリッキー例5: これは基本的に3 + 4である我々は両方持っているかもしれKWあたり$だけでなく、キロワット時あたりの$を、その速度は、両方を扱うパワーとエネルギー。 簡単な例: 一部の変換は非常に簡単で、これらはWeb上のほとんどの情報が処理できる変換です。1000 Wh = 1kWhなど。サームとデサームまたはkWからMWなどでも同じことが言えます。ここでは手助けは必要ありませんが、変換の約70%がこのタイプになることに注意してください。 開始方法についての私の考えですが、終了方法については不明です: これは明らかに非常に厄介なので、各商品と「使用タイプ」のすべてのデータを格納するために標準測定単位を選択することを提案します。したがって、電気の場合、標準のエネルギー単位はkWH、標準の電力単位はkWになります。したがって、他のエネルギー/電力単位に変換するには、すべての可能な組み合わせではなく、標準との間の変換率のみが必要です。MWからWに変換する必要がある場合は、kWへの変換またはkWからの変換によっていつでも実行できます。 変換率は特定の時間に依存する可能性があるため、この時間を測定に関連して保存できるようにする必要があります。これらのコンバージョン率が1時間に1回以上変化することを心配する必要はなく、1日1回と想定することもできると思います。 変換率は公開された値に依存する可能性があるため、この値を測定に関連して保存できるようにする必要があります。これらのコンバージョン率が1時間に1回以上変化することを心配する必要はなく、1日1回と想定することもできると思います。 これがすべて理解できたら、すべての単位変換を処理する以外に何もしないWebサービスを作成することを期待しています。私はこれらの変換を実行するSQLを探していません。それを作成するためにいくつかの創造的なキャッシュを行うことができるので、これらのテーブルを完全にハンマー処理するわけではありませんが、ユーザーがアクセスするWebサイトでページの読み込みあたり〜400の値の変換を処理する必要がある場合があります。これが重要かどうか、どのように重要かはわかりません。 変わらないコンバージョン率と変わらないコンバージョン率をどのレベルで保存すればよいかわからず、簡単に簡単にアクセスできる方法で正確にキーオフする方法もわかりませんと連携。 これに取り組む方法、または役立つ可能性のあるいくつかの公開されたリーディングマテリアルに取り組む方法についての考えは?私はSQL Serverを使用しています(間もなくSQL Azureになります)が、これは特に問題にはなりません。これを適切に表すためのスキーマが、ここで問題になっています。インチとセンチメートルのように単純なものであれば、簡単です。しかし、ここでは変換率の違いが問題です。

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