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

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

1
SQL Server Mangement Studioがデフォルトでインデックスをスクリプト化しないのはなぜですか?
最近、デフォルトでデータベースのスクリプトにインデックスが含まれていないことに気付きました。毎回オプションを変更する必要があります。 誰かが理由を説明してもらえますか?このデフォルトの動作について何か洞察はありますか、それともMicrosoftがそうしたいという理由だけですか?

2
この選択で1回のシークで同じ結果を取得する方法はありますか?
クエリを変更するか、オプティマイザの戦略に影響を与えることにより、1回のシークまたはスキャンで次と同じデータを取得することは可能ですか? これに類似したコードとスキーマは現在SQL Server 2014にあります。 再現スクリプト。セットアップ: USE tempdb; GO IF OBJECT_ID('dbo.TestUpload', 'U') IS NOT NULL DROP TABLE dbo.TestUpload; CREATE TABLE dbo.TestUpload( JobRunId bigint NOT NULL, ThingAName nvarchar(255) NOT NULL, ThingAType nvarchar(255) NOT NULL, ThingAGranularity nvarchar(255) NOT NULL, ThingBName nvarchar(255) NOT NULL, ThingBType nvarchar(255) NOT NULL, ThingBGranularity nvarchar(255) NOT NULL ); CREATE …

1
先読み(プリフェッチ)を使用して、より多くの(およびさまざまな数の)論理読み取りを実行する理由
SQL Serverでtpchデータベースを作成した後、以下のクエリを試しました。 set statistics io on DBCC DROPCLEANBUFFERS; select top 100 * from dbo.lineitem order by l_partkey; テーブルのlineitemには、l_partkeyに非クラスター化インデックスがあります。上記のクエリを数回発行したところ、論理読み取りが毎回異なることがわかりました。 Table 'lineitem'. Scan count 1, logical reads 1019, physical reads 4, read-ahead reads 1760, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. Table 'lineitem'. Scan count 1, logical …

1
テーブルAをテーブルBに切り替えると、インデックスデータも切り替えられますか?
現在、かなり大きなテーブル(500〜700万行)があります。このテーブルは、ステージングテーブルのデータを構築し、ALTER TABLE .. SWITCH TO ..ステートメントを使用してデータを本番テーブルに切り替えるプロシージャによって定期的に再構築されます。 例: BEGIN TRAN; -- Rebuild indexes ALTER INDEX IX_NC_GroupEvent_staging_GroupName on [dbo].[GroupEvent_staging] REBUILD; ALTER INDEX IX_NC_GroupEvent_staging_Created ON [dbo].[GroupEvent_staging] REBUILD; -- Empty production table TRUNCATE TABLE [dbo].[GroupEvent]; -- Switch data from staging-table into production table ALTER TABLE [dbo].[GroupEvent_staging] SWITCH TO [dbo].[GroupEvent] COMMIT; この操作を実行すると、インデックス(または必要に応じてインデックスデータ)の現在の状態も切り替えられますか?私は2つの理由のために尋ねています: 1)SWITCH TOステートメントを実行するには、ソーステーブルとターゲットテーブルの両方に同じインデックスが含まれている必要があります。これにより、インデックスデータも切り替えられる可能性があると思いますが、これを確認する方法がわかりません。 2)この方法でテーブルを作成する主な利点は、使用中に本番テーブルで過度の作業を実行しないようにすることです。当然、ステージングテーブルでインデックスを再構築でき、再構築されたインデックスをテーブルと共に本番用インデックスに切り替えることができれば、とても嬉しく思います。

2
エラー:「1つ以上のエンティティがそれを使用して署名または暗号化されているため、証明書を削除できません。」
データベースから削除したい証明書があります。 コマンドを発行した場合 DROP CERTIFICATE <FooCert> エラーが出る The certificate cannot be dropped because one or more entities are either signed or encrypted using it Jason Strateによれば、証明書によって何が署名されているかを知ることができるはずです。 次のクエリは0行を返します。 SELECT OBJECT_SCHEMA_NAME(co.major_id) + '.' + OBJECT_NAME(co.major_id) FROM sys.certificates c INNER JOIN sys.crypt_properties co ON c.thumbprint = co.thumbprint WHERE co.crypt_type_desc = 'SIGNATURE BY CERTIFICATE' AND …

2
2016へのアップグレード後、SQL Serverエージェントはインスタンスに接続できません
SQL Server 2014 Enterpriseを備えたクラスター化されたWindows 2012 R2サーバー。 2014 SP1 CU4から2016 RTMにインスタンスをアップグレードしただけで、SQL Serverエージェントを起動しようとするとこのエラーが発生します。 SQLサーバーエージェントログ 2016-06-06 11:53:58 - ? [100] Microsoft SQLServerAgent version 13.0.1601.5 (X64 unicode retail build) : Process ID 10884 2016-06-06 11:53:58 - ? [495] The SQL Server Agent startup service account is DOMAIN\USERNAME. 2016-06-06 11:54:28 - ! [150] SQL Server …

2
拡張イベントとSQL監査-パフォーマンスへの影響
UPDATE/INSERT非常にアクティビティの多い特定のテーブルのステートメントを監視するために、データベースに監査証跡のようなシステムをセットアップしたいと思います。私の目の前には、SQL Serverの組み込み監査システムを使用するか、拡張イベントを使用するという2つのオプションがあります。 SQL Server Auditは内部的に拡張イベントを使用するため、拡張イベントの代わりに直接監査を使用すると、ある種のオーバーヘッドがあると思います。 どのシステムがサーバーに影響を与えているかを分析するためのテストを行う方法はありますか?XEセッションが作成されたときに実際に何が起こるかを知ることができれば、サーバーへの影響を分析するのに役立ちます。 トリガーを検討し、オーバーヘッドのためにそのオプションを省略しました。しかし、それはインターネットからの情報に基づいて決定されました。

2
主キーを持つ「INTO」テーブルを作成する
たぶんこのコミュニティにとって私の問題は簡単ですが、私(単純なJavaプログラマー)にとってはそれは大きな問題です。 ますます多くのデータを含むBig DBがあります。したがって、外部データベース管理者は、一時テーブルに必要なデータを表示するジョブを作成しました。しかし、彼は主キーなしでテーブルを作成していました。私のJavaプロジェクトでこのテーブルを読みに行くと、エラーが発生します。 主キーが存在しないため、このテーブルを読み取ることができません。 この複雑なプロシージャの構造を変更せずに、自動インクリメンタル主キーを作成する可能性をプロシージャに挿入できますか? これは、ストアドプロシージャコードの始まりです。 USE [MYDB] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER Procedure [dbo].[spSchedula_Scadenzario] as begin drop table MYDB.dbo.tmpTable select aa.* into MYDB.dbo.tmpTable from (...) 前もって感謝します

2
複数のストアドプロシージャで同じコード
最近入社しましたが、多くのストアドプロシージャに同じコードセクションが繰り返し含まれていることに気づきました。発生したすべてのSPでそのコードの小さなセクションを変更する必要があったので、気が付きました:) これはかなり大きなコードの塊で、約30行です。コードはinsertステートメントの一部であり、基本的には4つのテーブルをWHERE/AND、SP間で実際に変更されない条件と一緒に結合します。以下のようになります。 ... ... FROM <TableOne> INNER JOIN <TableTwo> ON ... AND ..... AND ..... LEFT JOIN <TableThree> ON ... AND ..... AND ..... WHERE ..... AND ..... AND ..... AND MedicalPlanCode IN ('abc', 'def', 'ghi') SPからSPに変更される唯一の部分は値('abc'、 'def'、 'ghi')です。 また、これらの値の量が異なる場合があるため、一部のSPには2つの値があり、他のSPには5つの値があります。 私が考えるすべてのことは、コードのそのセクションを動的SQLに変更し、それが価値があるかどうかはわかりません。しかし、私のプログラマはこの状況を嫌っています。 なんらかのコードの再利用を実装する必要がありますか?ROIはありますか?私のオプションは何ですか?約100のストアドプロシージャを実行する必要があり、約1時間かかりました。 100個のSPは、20以上の異なるデータベースに分散しています。ビューを作成する権限があります。

2
[0-9]は数字、[az]は文字のように、句読点に相当するT-SQLはありますか?
句読点を含む列から値をプルできるようにする[0-9]および[a-z]パターンに相当するT-SQLはありますか? 例えば: Create Table #Test ( Value VarChar(10) ) Insert Into #Test Values ('123a'), ('456b'), ('12ABC'),('AB!23'),('C?D789') Select * From #Test Where Value like '[0-9][0-9][0-9][a-z]' これは、最初の3文字が0から9までの数字で、最後の文字がaからzまでの文字である値を返すため、123aおよびなど456bの値を返しますが、の値は返しません12ABC。 句読点に相当するもの[0-9]が数字や[a-z]文字にあるかどうか知りたいので、返さAB!23れC?D789ますか? 正規表現を使用できる場合^[a-zA-Z0-9]*$、文字列内の英数字に一致する表現を使用する可能性があります。 Where Value like '^[a-zA-Z0-9]*$' これに相当するSQLはありますか? RegExで実行できるこの種のことは知っていますが、T-SQLでそれが必要です。このサーバーにカスタムアセンブリをロードできないため、正規表現を使用できません。 実際の列はvarchar(200)です。照合順序は、Latin1_General_CI_ASです。SQL Server 2012 Standard Editionを使用しています。

1
CMSサーバーリスト内の大文字と小文字を区別する順序
これには理由があると信じなければなりませんが、私の人生ではそれを理解することはできません。中央管理サーバー内のサーバー名の順序は、CMSとして機能するサーバー自体の照合に関係なく、大文字と小文字が区別されます。 添付されているのは、ローカルマシンでホストされているCMSの例で、SQL_Latin1_General_CP1_CI_ASのサーバー照合で構成されています。CIは大文字と小文字を区別しません。CMSオブジェクトを保持するシステムテーブルから選択すると、適切な順序が返されますが、このスクリーンショットでわかるように、サーバーがUIに一覧表示される方法では、順序が大文字と小文字を区別して処理されていることは明らかです。 サーバーレベルに関連していないようなので、クライアントツールに関連していると思いますが、これに影響を与える照合レベル(または大文字と小文字の区別の設定)を特定できるツール内の場所はありません。 明らかにこの質問について重要なことは何もありませんが、UIで大文字と小文字を区別しないようにする方法を誰かが知っている場合は、順序を乱すサーバー名をキャメルケースにしたいので、私はそれを感謝します。

1
ハイパースレッディングを無効にする必要がありますか
背景はかなり密接にプロセッサの活動を監視するために、SQL歩哨を使用して私を持っていた私は最近、最近、いくつかのかなり高いCXPACKETの待ち時間に見てきました。 結果として気づいたことの1つは、コンテキストの切り替えに大きなスパイクがあることです。以下は5分のサンプルですが、このパターンは1日を通して非常に一般的です。 あなたが見ることができるように、それはかなり定期的に急上昇します。これについての私の理解は、これがCPUのプレッシャーの結果であると信じるようになります。しかし、その間、かろうじて60%を超えます。 いくつかの調査の結果、これはハイパースレッディングの結果として発生していると私に思わせました。ハイパースレッディングの危険のいくつかを以前に読んだことは知っています。しかし、それはかなり前に書かれました。 長い話を短くします。ハイパースレッディングは、コンテキストの切り替えにおけるこのスパイクの原因である可能性がありますか?コンテキストの切り替えが並列クエリに悪影響を及ぼしている可能性はありますか?私の環境ではハイパースレッディングを無効にする必要がありますか? 更新この特定のことが私の環境で起こっていますが、その核心にある質問はより普遍的です。高レベルのコンテキスト切り替えは、並列クエリにどの程度影響がありますか?ハイパースレッディングはこの種の問題を引き起こす可能性がありますか? 最終的に私がインターネットで見つけたもののほとんどは、ハイパースレッディングとSQL Serverは良い友達ではないことを示唆していますが、ほとんどの場合、その情報は非常に古いものです。 私のシステム構成に関する質問がたくさんあったので、それらを除外できるようにここで取り上げます。OSとbioの両方のレベルでパフォーマンスの電源設定があります。Maxdopは8に設定され、並列処理のコストしきい値は25です。32の論理コアと16の物理コアがあります。また、これは大部分がデータウェアハウスの負荷シナリオです。

3
sys.schemasおよびsys.synonymsに対するクエリの実行が1人のユーザーに対して非常に遅い
シナリオ:SQL Server 2014(v12.0.4100.1) .NETサービスはこのクエリを実行します。 SELECT name, base_object_name FROM sys.synonyms WHERE schema_id IN (SELECT schema_id FROM sys.schemas WHERE name = N'XXXX') ORDER BY name ...約6500行を返しますが、3分以上経過するとタイムアウトすることがよくあります。XXXX上記はありません「DBO」。 SSMSでこのクエリをUserAとして実行すると、クエリは1秒未満で返されます。 UserB(.NETサービスの接続方法)として実行すると、クエリは3〜6 分かかり、CPU使用率は(4コアの)25%になります。 UserAは、sysadminロールのドメインログインです。 UserBはSQLログインです。 EXEC sp_addrolemember N'db_datareader', N'UserB' EXEC sp_addrolemember N'db_datawriter', N'UserB' EXEC sp_addrolemember N'db_ddladmin', N'UserB' GRANT EXECUTE TO [UserB] GRANT CREATE SCHEMA TO [UserB] …

1
ネストされたループの統計I / Oを設定する
以下のクエリを考えてみましょう: CREATE PROC dbo.GetPage @orderid AS INT = 0, -- anchor sort key @pagesize AS BIGINT = 25 AS SELECT TOP (@pagesize) orderid, orderdate, custid, empid FROM dbo.Orders WHERE orderid > @orderid ORDER BY orderid; exec GetPage 25,25 上記のクエリに対してSET STATISTICS IOが返されました: (25 row(s) affected) Table 'Orders'. Scan count 1, logical …

1
この状況で、テーブル変数がクエリのパフォーマンスをどのように向上させているのですか?
この特定のケースでは、以下で説明しようとしますが、テーブル変数を使用すると、テーブル変数を使用しない場合よりもパフォーマンスが向上します。 理由を知りたいのですが、可能であれば、テーブル変数を削除します。 これは、テーブル変数を使用したクエリです。 USE [BISource_UAT] GO set statistics io on SET STATISTICS TIME ON SET NOCOUNT ON; DECLARE @OrderStartDate DATETIME = '15-feb-2015' DECLARE @OrderEndDate DATETIME = '28-feb-2016' DECLARE @tmp TABLE ( strBxOrderNo VARCHAR(20) ,sintReturnId INT ) INSERT INTO @tmp SELECT strBxOrderNo ,sintReturnId FROM TABLEBACKUPS.dbo.tblBReturnHistory rh WHERE rh.sintReturnStatusId in ( 3 …

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