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

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

4
列を合計して個別のバケットを作成するウィンドウクエリを作成するにはどうすればよいですか?
次のような10進値の列を含むテーブルがあります。 id value size -- ----- ---- 1 100 .02 2 99 .38 3 98 .13 4 97 .35 5 96 .15 6 95 .57 7 94 .25 8 93 .15 私が成し遂げる必要があることは、説明するのが少し難しいので、ご容赦ください。私がやろうとしているのは、size列の集計値を作成することvalueです。これは、に従って降順で、前の行の合計が1になるたびに1ずつ増加します。結果は次のようになります。 id value size bucket -- ----- ---- ------ 1 100 .02 1 2 99 .38 1 3 98 …

2
tempdbへの流出の可能性を減らすために、行推定をどのように改善できるか
tempdbイベントへの流出(遅いクエリの原因)が発生すると、特定の結合で行の見積もりがずれることがよくあります。マージイベントとハッシュ結合で流出イベントが発生し、ランタイムが3倍から10倍に増えることがよくあります。この質問は、流出事故の可能性を減らすことを前提として、行の見積もりを改善する方法に関係しています。 行の実際の数40k。 このクエリの場合、プランは不適切な行の見積もり(11.3行)を示しています。 select Value from Oav.ValueArray where ObjectId = (select convert(bigint, Value) NodeId from Oav.ValueArray where PropertyId = 3331 and ObjectId = 3540233 and Sequence = 2) and PropertyId = 2840 option (recompile); このクエリの場合、プランは適切な行推定(56k行)を示しています。 declare @a bigint = (select convert(bigint, Value) NodeId from Oav.ValueArray where PropertyId = 3331 and …

3
区切られた文字列の2番目または3番目の値を取得します。
次の表があります。 ========================================================== | Name_Level_Class_Section | Phone Num | ========================================================== | Jacky_1_B2_23 | 1122554455 | | Johnhy_1_B2_24 | 1122554455 | | Peter_2_A5_3 | 1122554455 | ========================================================== SQLステートメントを次のように簡略化しようと考えています。 select *, substring(Name_Level_Class_Section, CHARINDEX('_',Name_Level_Class_Section, (CHARINDEX('_', Name_Level_Class_Section) + 1)) + 1, CHARINDEX('_',Name_Level_Class_Section, (CHARINDEX('_',Name_Level_Class_Section, (CHARINDEX('_',Name_Level_Class_Section)+1))+1))- CHARINDEX('_',Name_Level_Class_Section, (CHARINDEX('_',Name_Level_Class_Section)+1))) as CLA from Bookings order by CLA asc, Name_Level_Class_Section …

1
LOG_BACKUP log_reuse_wait_descを使用したSQL Server 2012シンプルリカバリモデル
私は私自身の調査をやっている間に、データベース、なぜ、誰もが知っているんSIMPLE復旧モデルを持っているLOG_BACKUPためにlog_reuse_wait_desc? SQL Server 2012 SP1。数週間前に作成されたデータベース。レプリケーションもミラーリングもログ配布もありません。 私たちは、データベースのバックアップを行なったし、それは示して、別のインスタンスに復元SIMPLEし、NOTHING中にlog_reuse_wait他のインスタンスに。しかし、別のインスタンスへの復元は、復元操作がトランザクションをロールフォワード/ロールバックするときに問題を再現する良い方法だとは思いません。

2
1つのデータベースをフェイルオーバーした場合、同じミラーエンドポイントを共有する他のデータベースもフェイルオーバーしますか?
単一のSQL Serverインスタンスでミラーリングするための2つのデータベースセットアップがあります。テストデータベースと本番データベースです。どちらも、まったく同じエンドポイントを使用して別のサーバーにミラーリングされます。 テストデータベースのデータベースプロパティに移動して[フェールオーバー]ボタンをクリックすると、両方のデータベースがミラーエンドポイントを共有し、それらのサーバーネットワークアドレスプロパティが同じであるため、本番データベースもフェールオーバーしますか? 2番目のデータベースのミラーリングをセットアップするときに、何も新しく構成する必要がなかったので心配です。既存の情報をすべて使用しただけです。 データベースプロパティの[フェールオーバー]ボタンを使用すると、そのエンドポイントを使用するすべてのデータベース、またはプロパティを表示している特定のデータベースのみがフェールオーバーされますか?

3
小数点の自動丸めの問題
質問は比較的簡単です。中間結果が巨大な10進数である3つの列を計算する必要があります。SQLServerで、キャスト/変換に関係なく基本的に小数点を丸める問題が発生しています。 たとえば、単純な除算を1234/1233としてみましょう。電卓は1,00081103000811を生成します。しかし、SQL Serverでこれを行うと、次のようになります。 -- Result: rounded at 1.000811000... with trailing zeroes up until the 37 precision SELECT CAST(CAST(1234 AS DEC(38,34))/CAST(1233 AS DEC(38,34)) AS DEC(38,37)) -- Result: rounded at 1.000811 SELECT CONVERT(DECIMAL(38,32), 1234)/CONVERT(DECIMAL(38,32),1233) -- Correct result at 1,00081103000811 -- But this requires the zeroes to be put in manually when you …

5
SQL Serverの最大メモリ設定
SQL Server 2008とWebベースのアプリケーションを、2 GBのメモリしか利用できない単一の専用サーバーで実行しています。 他で言及されているように、SQL Serverは定期的に最大98%の物理メモリを使用します。これは、サーバーで実行されているWebアプリケーションの速度を低下させるようです。 SSMSの[サーバーのプロパティ]の[メモリ]で、[最大サーバーメモリ(MB)]が2147483647に設定されている 私の質問は、利用可能なメモリの量を考えると、最大サーバーメモリボックスに入れる推奨数は何ですか?また、同じサーバーがWebアプリケーションも実行しているということですか? さらに、SQL Serverの実行中にこの数を変更しても安全ですか? アドバイスありがとうございます。

3
tempdbログファイルのベストプラクティス
tempdbデータファイルの構成方法に関するブログを何度も読みましたが、tempdbログファイルに関する情報は見つかりませんでした。 tempdbで現在使用している戦略は次のとおりです。 tempdbデータファイルを分割する方法について、Paul Randalの推奨事項を使用しました tempdbデータファイルのサイズを最大に設定し、自動拡張を無効にしました。たとえば、100 GBの空きディスク領域があり、8つのtempdbデータファイルのサイズをそれぞれ10 GBに設定します。これにより、Brent Ozarが推奨するディスクの断片化が防止され、ログファイル用に20 GBが解放されます。 しかし、私が言ったように、誰もtempdbログファイルについて話していません。どうすればいいですか?私のセットアップでは、このファイルはtempdbデータファイルと同じ場所にあります。tempdbログファイルで使用するサイズと自動拡張値は何ですか?

2
SQL Serverのデータ圧縮は、読み取り専用のデータベースに非常に適していますか?
私が読んだSQL Serverのデータ圧縮に関するいくつかの文献では、書き込みコストが通常必要なものの約4倍に増加すると述べています。また、これがデータ圧縮の主な欠点であることを暗示しているようです。読み取り専用アーカイブデータベースの場合、100%埋められたページのデータ圧縮を使用すると、パフォーマンスが(ほとんど例外なく)向上することを強く意味します。 上記の説明は正しいですか? データ圧縮とそれ以外の場合の主な「違い」は何ですか(読み取り用) 「CPU + x%」? 「IO -y%」? ページ分割発生? tempdbの使用法? RAM使用量? そして書くために? この質問のために、コンテキストを大きな(> 1TB)データベースのページレベルの圧縮に制限できますが、追加のコメントはいつでも歓迎します。 参照: SQL Serverストレージエンジンブログ(DWシナリオは圧縮が非常に有利であることを示しています) データ圧縮:戦略、容量計画、およびベストプラクティス 圧縮対象を決定するためのより詳細なアプローチには、各テーブルとインデックスのワークロード特性の分析が含まれます。次の2つの指標に基づいています。 U:特定のテーブル、インデックス、またはパーティションに対する更新操作の、そのオブジェクトに対する合計操作に対する割合。Uの値が低い(つまり、テーブル、インデックス、またはパーティションが頻繁に更新されない)ほど、ページ圧縮の候補として適しています。 S:そのオブジェクトに対する操作の合計に対する、テーブル、インデックス、またはパーティションに対するスキャン操作の割合。Sの値が大きいほど(つまり、テーブル、インデックス、またはパーティションがほとんどスキャンされる)、ページ圧縮の候補として適しています。 上記の両方は、DWスタイルのデータベース(読み取り集中型/排他型のビッグデータ操作)のページ圧縮を推奨する方向に明らかに偏っています。


1
SQLサーバーは、count(*)の結果をint変数と比較する前にintに変換する必要があるのはなぜですか?
私のアプリケーションには多くのクエリがあり、having句でcount集計関数とint変数を比較しています。クエリプランでは、比較の前にimplicit_convertを確認できます。SQLサーバーのドキュメントに従って、カウント関数の戻り値の型がintであるため、これが発生する理由を知りたいです。では、なぜ2つのint値を比較するための暗黙の変換が必要なのでしょうか。 以下は、@ IdCountがint変数として定義されているそのようなクエリプランの一部です。 | --Filter(WHERE:([Expr1022] = [@ IdCount])) |-スカラー計算(DEFINE:([Expr1022] = CONVERT_IMPLICIT(int、[Expr1028]、0))) | --Stream Aggregate(GROUP BY:([MOCK_DB]。[dbo]。[Scope]。[ScopeID])DEFINE:([Expr1028] = Count(*)))


4
特定のユーザーのクエリが遅い
C#.NET Webアプリケーションから呼び出されるクエリがいくつかあります。これは常に高速です(SQL Serverのローカル管理者です)が、ユーザーのグループ(必要な権限を持つドメイングループ)の場合、クエリはアプリケーションでタイムアウトするポイント。 まったく同じクエリがユーザーごとに異なる動作をする原因は何ですか? より詳しい情報: クエリは、ストアドプロシージャではなく、C#コードのインラインSQLです。 アプリはドメイン認証を使用し、ユーザーと私はアプリを通じてクエリを実行します 問題は別のプランであるようで、1つはキャッシュされたため、ユーザーごとに異なっていました。クエリがアプリ経由で遅くなり、SQL Server Management Studioで高速になるため、何かがキャッシュに影響しています。

1
インデックスのロック順序による2つの更新でのSQL Serverのデッドロック
2つのUPDATEがあります。ステータス列も更新されているため、1つは最初にCIをロックし、次にNCI(ステータス)をロックします。もう1つは、NCIが変更中であることを認識しているため、すでにNCIのUロックを所有しており、CIのUロックを取得しようとします。 これらを強制的にシリアル化する最も簡単な方法は何ですか?これは内部インデックスの問題であるため、TABLEレベルのヒントを使用するのは奇妙に思われます-関係するテーブルは1つだけです-UPDLOCK、HOLDLOCKはそのテーブルで必要なすべてのインデックスに自動的に適用され、それによって強制的にシリアル化されますか? クエリは次のとおりです。 UPDATE htt_action_log SET status = 'ABORTED', CLOSED = GETUTCDATE() WHERE transition_uuid = '{F53ADDDA-E46B-4726-66D8-D7B640B66597}' AND status = 'OPEN'; その1つのXが(CREATED列で)CIの行をロックし、ステータス列を含むNCIでXロックを試みます。 UPDATE htt_action_log SET status = 'RUNNING {36082BCD-EB52-4358-E3D3-4D96FD5B9F0F} 1360094342' WHERE action_uuid = (SELECT TOP 1 action_uuid FROM htt_action_log WHERE transition_uuid = '{F53ADDDA-E46B-4726-66D8-D7B640B66597}' AND status = 'OPEN' ORDER BY action_seq) この1つのUは同じNCIをロックします-私が推測するネストされたクエリの場合、更新のためにCIをロックします。 …

2
異なるバージョン/エディションのバックアップファイルからデータベースを復元する
下位互換性の理由から、古いバージョンから新しいバージョンに復元している限り、SQL Serverでデータベースを復元することは可能であると読みました。 SQL Serverの異なるエディションの* .bakファイルからデータベースを復元できるかどうか、誰もが手に負えないでしょうか?非常に大規模なデータベースをFTP経由で移動するので、数日かかるので、これは1回だけ行うようにします。FTP経由でデータベースを転送するまでに誰も応答しない場合は、これを試し、テストで機能するかどうかを確認し、独自の質問に答えます。 以下は、SQL Serverのバージョンの詳細を取得するクエリです。のproductversion形式です{major revision}.{minor revision}.{release revision}.{build number}。私の場合、に{release revision}は5500ソースと5512ターゲットのの値があります。これで問題ありません。ただし、これeditionは異なります。 クエリ: SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY('productlevel'), SERVERPROPERTY('edition') ソースデータベース: 10.0.5500.0 SP3 Developer Edition (64-bit) ターゲットデータベース: 10.0.5512.0 SP3 Enterprise Edition (64-bit)

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