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

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

2
リーフページと非リーフページの違いは何ですか?
私はいくつかのインデックス使用レポートを実行していますが、LeafとNon-leafの定義を取得しようとしています。リーフと非リーフの両方の挿入、更新、削除、ページ結合、ページ割り当てがあるようです。私は本当にそれが何を意味するのか、または一方が他方よりも優れているかどうかを知りません。 誰かがそれぞれの簡単な定義を提供し、リーフまたは非リーフが重要である理由を説明できれば、それはありがたいです!

1
クラスター化列ストアの非クラスター化インデックスストレージ
SQL Serverでは、行ストアテーブルの一意でない非クラスター化インデックスに、非クラスター化インデックス構造のすべてのレベルでベースオブジェクトのブックマーク(RIDまたはクラスター化キー)が組み込まれます。ブックマークは、すべてのインデックスレベルで非クラスター化インデックスキーの一部として保存されます。 一方、非クラスター化インデックスが一意である場合、ブックマークはキーの一部としてではなく、インデックスのリーフレベルにのみ存在します(実際には、ブックマークは1つ以上の含まれる列として存在します)。 SQL Server 2016では、列指向のテーブル(クラスター化された列ストアインデックスを持つテーブル)に非クラスター化Bツリーインデックスを構築できます。 クラスター化された列ストアテーブルの非クラスター化Bツリーインデックスに使用される「ブックマーク」とは何ですか? 上記の一意および非一意の非クラスタ化インデックスの違いは引き続き適用されますか?

2
IS NULL値のフィルター選択されたインデックスが使用されないのはなぜですか?
次のようなテーブル定義があると仮定します。 CREATE TABLE MyTab ( ID INT IDENTITY(1,1) CONSTRAINT PK_MyTab_ID PRIMARY KEY ,GroupByColumn NVARCHAR(10) NOT NULL ,WhereColumn DATETIME NULL ) そして、次のようなフィルター処理された非クラスター化インデックス: CREATE NONCLUSTERED INDEX IX_MyTab_GroupByColumn ON MyTab (GroupByColumn) WHERE (WhereColumn IS NULL) このインデックスがこのクエリで「カバー」されていない理由: SELECT GroupByColumn ,COUNT(*) FROM MyTab WHERE WhereColumn IS NULL GROUP BY GroupByColumn 私はこの実行計画を取得しています: KeyLookupは、WhereColumn IS NULL述語用です。 計画は次のとおりです。https://www.brentozar.com/pastetheplan/?id …

2
SSMSをIntegration Servicesに接続する際の「アクセスが拒否されました」
特定のSQL Serverクラスターのネットワーク名を使用してSSMSをIntegration Servicesに接続しようとすると、次のエラーが表示されます。 コンピューター 'FooDB'上のIntegration Servicesサービスへの接続は、次のエラーで失敗しました: "アクセスが拒否されました。" このエラーは、DCOMを介したリモート接続を許可するようにコンピューターが構成されていない場合、またはユーザーがDCOMを介してSQL Server Integration Servicesサービスにアクセスする権限を持っている場合に発生します。 これは、十分に文書化されたソリューションの日常的な問題です。たとえば、こちらとこちらのソリューションをご覧ください。 しかし、私は知っているすべての解決策を試しましたが、問題は残っています。 より詳細には、次のことを行いました。 接続しているユーザーが、MsDtsServer100で上記にリンクされている記事にリストされているDCOM権限を持っていることを確認しました。 起動とアクティベーションの許可:ローカル起動を許可、リモート起動、ローカルアクティベーション、リモートアクティベーションを許可 アクセス許可:ローカルアクセスを許可、リモートアクセスを許可 構成許可:読み取りを許可 接続に関連するすべてのトラフィックがファイアウォールを正常に通過していることをパケットスニッファーで確認しました。TCP接続が切断される前に表示される最後のパケットは、MSRPCヘッダー内の「アクセス拒否」のWindowsステータスコードを含むサーバーからの応答です。 「Distributed COM Users」グループおよび/またはローカル管理者グループにユーザーを追加し、サーバーを再起動することをテストしました。これにより、ユーザーはローカルノード名(FooDBN1、FooDBN2)を使用してSSMSからSSISに接続できましたが、クラスターネットワーク名(FooDB)に接続するときに「アクセス拒否」エラーが発生します。使用方法、および他のクラスターで機能するもの。 また、これらのグループのメンバーシップを変更することは、他のクラスターで必要だとは思いません。 チェックした他のクラスターでは、デフォルト以外の構成なしでクラスター名を使用してSSMSをSSISに接続できます。 これはServerFaultの方が適切であり、必要に応じて移行される質問で問題ないことを認識していますが、SQL Serverの問題でもあり、ここのユーザーは以前に対処した可能性が高いと思います。 プラットフォームの詳細: Windows Server 2008 R2 SP1 SQL Server 2008 R2 SP2 単一のSQL Serverインスタンスを持つ2ノードのアクティブ/パッシブクラスター 誰も私がここで次に見るべきことを提案できますか? 更新:これは今日、神秘的に作業を開始しましたが、ローカル管理者グループのメンバーのみが対象です。私が知る限り、何も変わっていません。

2
挿入中にディスク容量がいっぱいになりました、どうなりますか?
今日、データベースを保存するハードドライブがいっぱいであることを発見しました。これは以前にも起こりましたが、通常、原因は非常に明白です。通常、不適切なクエリがあり、tempdbに大量の流出が発生し、ディスクがいっぱいになるまで増大します。今回は、tempdbがドライブ全体の原因ではなく、データベースそのものであるため、何が起こったのかが少しわかりにくくなりました。 事実: 通常のデータベースサイズは約55 GBでしたが、605 GBに増加しました。 ログファイルのサイズは標準で、データファイルは巨大です。 データファイルには85%の使用可能なスペースがあります(これを「空気」と解釈します:使用されたが、解放されたスペースです。SQLServerは、割り当てられるとすべてのスペースを予約します)。 tempdbのサイズは正常です。 考えられる原因を見つけました。あまりにも多くの行を選択するクエリが1つあります(不正な結合により、数十万が予想される110億行が選択されます)。これはSELECT INTOクエリであり、次のシナリオが発生したのではないかと思いました。 SELECT INTOが実行されます ターゲット表が作成されます データは選択されたとおりに挿入されます ディスクがいっぱいになり、挿入が失敗する SELECT INTOは中止され、ロールバックされます ロールバックは領域を解放します(既に挿入されたデータは削除されます)が、SQL Serverは解放された領域を解放しません。 ただし、この状況では、によって作成されたテーブルSELECT INTOがまだ存在することを期待していなかったため、ロールバックによって削除されるはずです。私はこれをテストしました: BEGIN TRANSACTION SELECT T.x INTO TMP.test FROM (VALUES(1))T(x) ROLLBACK SELECT * FROM TMP.test これは次の結果になります。 (1 row affected) Msg 208, Level 16, State 1, Line 8 Invalid object name 'TMP.test'. …

1
「どこ」でアクセントを無視する
データベースには、caron / hatschekを使用した複数のエントリがあります。現在、ユーザーは、なしでエントリを検索するときに、caron / hatschekを含むエントリを検索したいと考えています。これを簡単な例で示します。 データベースにエントリがあります(名前の連絡先) Millière この名前はその人が住んでいる国で正しいです 私たちの国では、caron / hatschekの文字はないため、ユーザーはを検索しMilliereます。è明らかに一致しないため、結果は表示されませんe。 私は、これはとして実現することができるか見当がつかないé、è、êその多くは、より利用可能です(これは手紙のための唯一の例ですe...)。 (文字列をすべてcaron / hatschekで基本文字列に置き換えるだけでよいので、他の方法ははるかに簡単です。明らかに、ユーザーは、障害のある名前ではなく、データベースの名前の正しいバージョンを望んでいます。)

4
varcharデータ型がUnicode値を許可するのはなぜですか?
varchar列を持つテーブルがあります。以下に示すように、商標(™)、著作権(©)およびその他のUnicode文字を許可しています。 Create table VarcharUnicodeCheck ( col1 varchar(100) ) insert into VarcharUnicodeCheck (col1) values ('MyCompany') insert into VarcharUnicodeCheck (col1) values ('MyCompany™') insert into VarcharUnicodeCheck (col1) values ('MyCompany░') insert into VarcharUnicodeCheck (col1) values ('MyCompanyï') insert into VarcharUnicodeCheck (col1) values ('MyCompany') select * from VarcharUnicodeCheck しかし、varcharの定義では、Unicode以外の文字列データが許可されています。ただし、Trademark(™)およびRegistered(®)シンボルはUnicode文字です。定義はvarcharデータ型のプロパティと矛盾しますか?最初のリンクと2つ目のリンクを読んだ。しかし、定義がユニコード文字列以外の値のみを許可すると言っているときに、ユニコード文字列を許可する理由を理解できませんでした。

3
SQL Serverのページネーション
約100 GBの非常に大きなデータベースがあります。私はクエリを実行しています: select * from <table_name>; 100行目から200行目だけを表示したいです。 これが内部でどのように起こるかを理解したいです。データベースは、ディスクからすべてのレコードをメモリにフェッチし、100番目から400番目の行をクエリクライアントに送り返しますか?または、Bツリーなどのインデックス作成メカニズムを使用して、データベースからそれらのレコード(100番目から200番目)のみを取得するメカニズムが存在しますか? これはページネーションの概念に関連していることがわかりましたが、データベースレベルで内部的にどのように発生するかを正確に見つけることができませんでした。

4
SQL Server 2016 DBメールが送信されない
私はSQL Server 2016を使用していますが、急いでいます... DBメールが送信されず、見る場所がなくなりました。DBmail実行可能ファイルに対するSQLアカウントの許可を再確認しました-読み取りと実行が完了しました。ファイアウォールのアウトバウンドポート587のルールを入力しました。同じ未送信の問題で別のメールアカウントとプロファイルを試しました。ログ(dbメールログ)の唯一のエントリは、サービスの開始と終了です。私が見つけられるエラーはどこにもありません。電子メールは単に送信キューに入り、決して送信キューから出ないように見えます。アカウントは、自分自身で、および別のマシン上のSQL Server 2014インスタンスから電子メールを送受信できます。 送信済みステータスが「未送信」のアイテムのキューがあり、未送信メールの長いキューは別として、すべての通常の場所をチェックして、すべてのアイテムで期待される結果を確認しました。 SELECT * FROM msdb..sysmail_event_log order by log_id DESC SELECT * FROM dbo.sysmail_mailitems SELECT * FROM dbo.sysmail_sentitems USE msdb SELECT sent_status, * FROM sysmail_allitems SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb'; EXECUTE msdb.dbo.sysmail_help_status_sp 私はそれをオフにして再びオンにしてみました...この状況を明らかにするDMVなどを見逃しましたか?これは、SQL Server 2016の既知の問題で、検索には含まれていませんか?このメールを送信する他の可能な手順はありますか?



2
SQL Server UniqueIdentifier / GUID内部表現
私の同僚が私に興味深い質問を送ってきたが、それは完全には説明できない。 彼はいくつかのコード(以下を含む)を実行し、それからやや予期しない結果を得ました。 本質的に、UniqueIdentifier(これから私が参照するGuid)をbinary(またはvarbinary)タイプに変換するとき、結果の前半の順序は逆になりますが、後半はそうではありません。 私の最初の考えは、システムのエンディアンが原因であり、Guidディスプレイは保存されているが、binaryフォームは保証されていないということでした。 明らかにこれは実装の詳細ですが、それについて適切な説明があったのではないかと思っていました。 コード: declare @guid uniqueidentifier = '8A737954-CBEC-40CE-A534-2AFFB5A0E207'; declare @binary binary(16) = (select convert(binary(16), @guid)); select @guid as [GUID], @binary as [Binary]; 結果: GUID Binary 8A737954-CBEC-40CE-A534-2AFFB5A0E207 0x5479738AECCBCE40A5342AFFB5A0E207 ご覧のとおり、Guid(の最後まで40CE)の前半は各セクションごとに逆方向に保存されています。つまり、の最初のセクションGuidは後方に、次に2番目のセクション、次に3番目のセクションになりますが、セクションの順序は保持されます。その後、最後の2つのセクションは、に表示される正確な順序で保存されGuidます。 誰でもこれを説明できますか?(より大きなテストセットを以下に示します。) コード: declare @guid_to_binary table ( [id] int identity(1,1), [guid] uniqueidentifier, [binary_conversion] binary(16) ); declare @i int = 1; …


1
緩やかに変化するディメンションに対してSQL Server 2016システムバージョンのテンポラルテーブルを使用したクエリ戦略
使用している場合、システムバージョン管理一時テーブル(SQL Serverの2016年新)が、この機能は大規模なリレーショナルデータウェアハウス内の寸法を変更ゆっくり処理するために使用されるクエリのオーサリングおよびパフォーマンスの意味は何ですか? たとえば、列を含む100,000行のCustomerディメンションと、外部キー列Postal Codeを含む数十億行のSalesファクトテーブルがあるとしCustomerIDます。そして、「顧客の郵便番号別の2014年の総売上」をクエリしたいとします。簡略化されたDDLは次のようなものです(わかりやすくするために多くの列を省略しています)。 CREATE TABLE Customer ( CustomerID int identity (1,1) NOT NULL PRIMARY KEY CLUSTERED, PostalCode varchar(50) NOT NULL, SysStartTime datetime2 GENERATED ALWAYS AS ROW START NOT NULL, SysEndTime datetime2 GENERATED ALWAYS AS ROW END NOT NULL, PERIOD FOR SYSTEM_TIME (SysStartTime, SysEndTime) ) WITH (SYSTEM_VERSIONING = ON); CREATE …

1
ページ数が1000未満のインデックスを再構築しませんか?
Ola Hallengrensスクリプトを使用して、インデックスをメンテナンスします。その前に、次のクエリを使用して、どのインデックスが最も断片化されているかを確認しました。 SELECT dbschemas.[name] as 'Schema', dbtables.[name] as 'Table', dbindexes.[name] as 'Index', indexstats.avg_fragmentation_in_percent, indexstats.page_count FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS indexstats INNER JOIN sys.tables dbtables on dbtables.[object_id] = indexstats.[object_id] INNER JOIN sys.schemas dbschemas on dbtables.[schema_id] = dbschemas.[schema_id] INNER JOIN sys.indexes AS dbindexes ON dbindexes.[object_id] = indexstats.[object_id] AND indexstats.index_id …

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