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

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

1
上位のデータベースプラットフォームで符号なし整数型が利用できないのはなぜですか?
データベースは通常、さまざまなデータ型とカスタムの長さで非常にカスタマイズ可能です。 unsigned intPostgreSQLとMS SQL Serverのどちらからも利用できない型を使用する構文を探しているので、私は驚きました。MySQLとOracleのようです。 これは明白な省略のように見えます-次に最適なパフォーマンスオプションはlong / bigint(8バイト整数)ですが、完全に不要な場合があります!ネイティブのunsigned intサポートを含めないことを選択する理由を誰もが知っていますか?

3
SQL ServerがすべてのCPUコア/スレッドを使用していない
SQL Serverのハードウェアをアップグレードした後、Windowsタスクマネージャーで、SQLインスタンスが使用可能なスレッドの半分しか使用していないことに気付きました。 。 サーバーには次のハードウェアとソフトウェアがあります。 Windows 2008 R2 Enterprise 64ビットSP1 Intel Xeon E7-4870-4プロセッサー(40コア、80スレッド) Microsoft SQL Server 2012 Enterprise Edition(64ビット) 実行select cpu_count from sys.dm_os_sys_infoすると40が返されます。 OSは80スレッドすべてを認識します。 サーバーの処理能力の半分しか使用されていないのはなぜですか? 2台のサーバーに同じハードウェアとソフトウェアがあり、どちらも同じ動作を示します。

3
CTE階層の最適化
以下を更新 アカウントの階層を表す一般的なアカウント/親アカウントアーキテクチャのアカウントのテーブルがあります(SQL Server 2012)。CTEを使用してVIEWを作成し、階層をハッシュしました。全体として、意図したとおりに美しく機能します。任意のレベルで階層を照会し、ブランチを簡単に確認できます。 階層の関数として返される必要があるビジネスロジックフィールドが1つあります。各アカウントレコードのフィールドは、ビジネスのサイズを記述します(CustomerCountと呼びます)。レポートする必要があるロジックは、ブランチ全体からCustomerCountをロールアップする必要があります。つまり、アカウントが与えられた場合、そのアカウントのcustomercount値と、階層に沿ったアカウントの下のすべてのブランチのすべての子を合計する必要があります。 acct4.acct3.acct2.acct1のように見えるCTE内に構築された階層フィールドを使用して、フィールドを正常に計算しました。私が直面している問題は、単純に高速化することです。この1つの計算フィールドがないと、クエリは約3秒で実行されます。計算フィールドに追加すると、4分のクエリになります。 これが正しい結果を返す、私が思いつくことができた最高のバージョンです。パフォーマンスをそれほど犠牲にすることなく、このAS A VIEWをどのように再構築できるかについてのアイデアを探しています。 私はこれが遅くなる理由を理解しています(where句で述語を計算する必要があります)が、それを構造化して同じ結果を得る別の方法を考えることはできません。 以下に、テーブルを構築し、CTEを私の環境で動作するように正確に実行するためのサンプルコードを示します。 Use Tempdb go CREATE TABLE dbo.Account ( Acctid varchar(1) NOT NULL , Name varchar(30) NULL , ParentId varchar(1) NULL , CustomerCount int NULL ); INSERT Account SELECT 'A','Best Bet',NULL,21 UNION ALL SELECT 'B','eStore','A',30 UNION ALL SELECT 'C','Big Bens','B',75 UNION …

2
ベンダーは、ビジネスアプリケーションの5分ごとにMSDBジョブを実行したい
両方のDBがSQL Serverインスタンスに存在する2つの異なるアプリケーションを150以上の他のDBと統合しようとするサードパーティベンダーがあり、2つの異なるアプリケーションを5分ごとに「同期」するMSDBジョブを作成します。毎分実行したかった)。 私の最初の予感は、代わりにWindowsのスケジュールされたジョブ、または恐らく恐ろしいトリガー(通常、このような状況に頼る)を使用して、アプリケーション層で何らかの方法でこれを行う必要があるということです。 MSDBジョブをできるだけDBAタスク用に予約しておくと、混乱が減ります。また、このような非常にアクティブなジョブのジョブ履歴を表示すると、MSDBのクエリが遅くなります。バックアップ履歴などのより重要なもの)。しかし、再び、私の好みが間違っている可能性があり、MSDBのアプリケーション層にいくつかのスペースを確保し、袖をまくり、ジョブ履歴の問題を修正する必要があります。バックアップなどの重要なもの(またはハイパーアクティブなジョブエントリをパージ)。 私が抱えているもう1つの問題は、GUIを介してアップグレードを実行するときに、DBに対してのみ「dbo」権限ではなく、このベンダーに「sysadmin」権限を与える必要があり、ミッションクリティカルなインスタンスを爆破しないことを願っていますDBは(統合の欠点の1つ)です。 私は、私たちが素敵をプレイしていないすべてのベンダーを置く別の「単離された」インスタンス上に置くことができますね、しかし、我々は(新しいSQLインスタンスを指すようにアプリケーションを再設定する必要がため息この場合には、残念ながら簡単ではないが)。 ベンダーは、トリガーがどれほど悪いかについての私の懸念を既に押し返しました。それで、私はこれを少し「グーグルで検索」し、空になりました。これは悪い考えであり、私はそれを参照できるという「信頼できる」リンクを誰かが見ましたか?または、彼らのアプローチを採用すべきですか? 助けを求める前にSQLフォーラムに投稿したことがないと思うので、うまくいけば私の問い合わせは適切に組み立てられます。 編集:SQL Server 2008 Enterprise R2 x64 SP1を実行しています(バージョンについて言及するのを忘れていたことを指摘してくれてありがとう!)うーん、できれば、新しいバージョンに移行するときにMSDBアップグレードスクリプトを変更する必要はありません。 御時間ありがとうございます!リッチ

2
実行プランを使用してT-SQLクエリを最適化する方法
過去2日間、試行錯誤と実行計画を使用して最適化しようとして費やしたSQLクエリがありますが、役に立ちません。これを行うことを許してください。しかし、私はここに実行計画全体を掲載します。簡潔にするためと会社のIPを保護するために、クエリおよび実行プランのテーブル名と列名を汎用にするように努力しました。実行計画は、SQL Sentry Plan Explorerで開くことができます。 かなりの量のT-SQLを実行しましたが、実行プランを使用してクエリを最適化することは私にとって新しい分野であり、その方法を本当に理解しようとしました。したがって、誰かがこれを手伝って、この実行計画を解読してクエリで最適化する方法を見つける方法を説明できれば、私は永遠に感謝しています。最適化するクエリはさらに多くあります。この最初のクエリを支援するための踏み台が必要です。 これはクエリです: DECLARE @Param0 DATETIME = '2013-07-29'; DECLARE @Param1 INT = CONVERT(INT, CONVERT(VARCHAR, @Param0, 112)) DECLARE @Param2 VARCHAR(50) = 'ABC'; DECLARE @Param3 VARCHAR(100) = 'DEF'; DECLARE @Param4 VARCHAR(50) = 'XYZ'; DECLARE @Param5 VARCHAR(100) = NULL; DECLARE @Param6 VARCHAR(50) = 'Text3'; SET NOCOUNT ON DECLARE @MyTableVar TABLE …

7
ソース管理下のストアドプロシージャ、ベストプラクティス
現在、Tortoise SVNを使用して.NET Webアプリケーションのソース管理を行っています。SQL Serverストアドプロシージャをソース管理に組み込むための最良の方法は何ですか?現在、VS 2010を開発環境として使用しており、SQL Server Data Tools(SSDT)を使用して構外のSQL Server 2008 R2データベースに接続しています。 私が過去にやっていることは、プロシージャを.sqlファイルに保存し、このファイルをソース管理下に置くことです。これよりも効率的な方法があるはずだと思いますか?VS2010、SSDT、または実稼働マシンのSQL Serverにインストールできる拡張機能はありますか?

6
2008より遅いSQL Server 2012
古いサーバー(Windows 2008 / SQL Server 2008/16 GB RAM / 2 x 2.5 GHzクアッドコア/ SASディスク)から大規模なWebサイトとデータベースを、より優れた新しいサーバー(Windows 2008 R2 / SQL Server 2012 SP1 / 64 GB RAM / 2 x 2.1 GHz 16コアプロセッサ/ SSDディスク)。 古いサーバーのデータベースファイルをデタッチし、新しいサーバーにコピーして添付しました。すべてがうまくいきました。 その後、互換性レベルを110に変更し、統計を更新し、インデックスを再構築しました。 残念ながら、新しいSQL 2012サーバーでは、ほとんどのSQLクエリが古いSQL 2008サーバーよりもはるかに遅い(2-3-4倍遅い)ことに気付きました。 たとえば、約70万件のレコードがあるテーブルでは、古いサーバーではインデックスのクエリに約100ミリ秒かかりました。新しいサーバーでは、同じクエリに約350ミリ秒かかります。 すべてのクエリで同じことが起こります。 ここで助けていただければ幸いです。チェック/検証する内容を教えてください。新しいSQL Serverを搭載した優れたサーバーではパフォーマンスが低下すると信じるのは非常に難しいためです。 詳細: メモリは最大に設定されています。 私はこのテーブルとインデックスを持っています: CREATE TABLE [dbo].[Answer_Details_23]( [ID] [int] IDENTITY(1,1) …

3
同じサーバー上の2つのインスタンス間で共有されるものは何ですか?
単一のWindowsサーバーにSQL Serverの複数のインスタンスをインストールします。サーバーはベアメタルWindows 2008 R2であるため、VMは使用できません。 セキュリティのために、管理、Windowsサービス、アカウントなど、2つのインスタンスが何も共有しないようにする必要があります。そのため、質問は次のとおりです。 WindowsサーバーにSQL Serverの複数の「インスタンス」をインストールする場合、何が共有されますか?

3
OFFSET…FETCHと古いスタイルのROW_NUMBERスキームとの間に実行計画の違いがあるのはなぜですか?
OFFSET ... FETCHSQL Server 2012で導入された新しいモデルは、シンプルで高速なページングを提供します。2つの形式が意味的に同一であり、非常に一般的であることを考慮すると、なぜまったく違いがあるのですか? オプティマイザーが両方を認識し、それらを(簡単に)最大限に最適化すると仮定します。 OFFSET ... FETCHこれは、コストの見積もりによると2倍速い非常に単純なケースです。 SELECT * INTO #objects FROM sys.objects SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY object_id) r FROM #objects ) x WHERE r >= 30 AND r < (30 + 10) ORDER BY object_id SELECT * FROM #objects ORDER BY …

3
範囲内の日付ごとに列を返します
表Aを持っているとしましょう:BookingsPerPerson Person_Id ArrivalDate DepartureDate 123456 2012-01-01 2012-01-04 213415 2012-01-02 2012-01-07 ビューで達成する必要があるのは次のとおりです。 Person_Id ArrivalDate DepartureDate Jan-01 Jan-02 Jan-03 Jan-04 Jan-05 Jan-06 Jan-07 123456 2012-01-01 2012-01-04 1 1 1 1 213415 2012-01-02 2012-01-07 1 1 1 1 1 1 システムはイベント用であるため、各ホテルの予約には1〜15日かかりますが、それ以上はかかりません。どんなアイデアでも大歓迎です。

4
トランザクションでテーブル構造を変更し、エラーが発生した場合にロールバックできますか?
ALTER TABLE実行中のステートメントがいくつかあります。すべてが機能するわけではありません(SQLデータ比較の実行結果です)。それらをいくつかのトランザクションにグループ化し、何か問題が発生した場合はステートメントをロールバックします。 これは可能ですか、それともロールバックできるデータのみですか?


2
SQL Serverに割り当てられるRAMの量を簡単に確認しますか?
SQL Server 2005では、タスクマネージャーを確認し、少なくともSQL Serverに割り当てられているメモリ量を大まかに確認できます。 SQL Server 2008では、SQLServer:Memory Manager / Total Server Memory(KB)perfカウンターが16,732,760を示していても、ワーキングセットまたはコミットサイズが実際に500 MBを超えることはありません。 タスクマネージャで実際にサーバーメモリを表示する設定はありますか?または、SQL Serverでメモリの使用方法を変更した結果ですか


1
SQL Serverは、述語が相関していることをどのように知っていますか?
:診断しながら、SQL Server 2008 R2のが悪いカーディナリティ推定(シンプルインデックスにもかかわらず、最新の統計情報など)ので、貧弱なクエリ計画を照会し、私はおそらく関連のKBの記事見つけ クエリを実行するとパフォーマンスの低下:FIXをSQL Server 2008またはSQL Server 2008 R2またはSQL Server 2012の相関AND述語を含む KB記事の意味は「相関」によって推測できます。たとえば、述語#2と述語#1は、主に同じ行を対象としています。 しかし、SQL Serverがこれらの相関関係をどのように認識しているかはわかりません。テーブルには、両方の述語の列を含む複数列のインデックスが必要ですか?SQLは統計を使用して、ある列の値が別の列と相関しているかどうかを確認しますか?または、他の方法が使用されていますか? 私はこれを2つの理由で尋ねています: この修正プログラムを使用してどのテーブルとクエリが改善される可能性があるかを判断するには #1に影響を与えるためにインデックス作成、統計などで何をすべきかを知るため

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