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

SQL Server 2014(メジャービルドバージョン12.0.xxxx)。sql-serverにもタグを付けてください。

2
これがBIGINT colでシークするのに、追加の定数スキャン、計算スカラー、ネストされたループ演算子があるのはなぜですか?
一部のクエリの実際の実行計画を見ると、WHERE句で使用されているリテラル定数が、スカラー計算と定数スキャンのネストされたチェーンとして表示されていることに気づきました。 これを再現するには、次の表を使用します CREATE TABLE Table1 ( [col1] [bigint] NOT NULL, [col2] [varchar](50) NULL, [col3] [char](200) NULL ) CREATE NONCLUSTERED INDEX IX_Table1 ON Table1 (col1 ASC) その中にいくつかのデータがあります: INSERT INTO Table1(col1) VALUES (1),(2),(3), (-9223372036854775808), (9223372036854775807), (2147483647),(-2147483648) 次の(ナンセンス)クエリを実行すると: SELECT a.col1, a.col2 FROM Table1 a, Table1 b WHERE b.col1 > 2147483648 インデックスシークとスカラー計算(定数から)の結果で、ネストされたループの描画を行うことがわかります。 リテラルがmaxintよりも大きいことに注意してください。それは書くのに役立ちますCAST(2147483648 as …

2
自己参照(階層)テーブルからツリー構造を取得できますか?
次のような階層テーブルがあるとします。 CREATE TABLE [dbo].[btree] ( id INT PRIMARY KEY , parent_id INT REFERENCES [dbo].[btree] ([id]) , name NVARCHAR(20) ); ツリー構造全体を取得したいのですが。 たとえば、次のデータを使用します。 INSERT INTO [btree] VALUES (1, null, '1 Root'); INSERT INTO [btree] VALUES (2, 1, '1.1 Group'); INSERT INTO [btree] VALUES (3, 1, '1.2 Group'); INSERT INTO [btree] VALUES (4, …

1
EXECステートメントのquery_hashがゼロになるのはなぜですか?
私は、拡張イベントを使用してSQL Serverの監視システムをセットアップし、開発者向けの「運用フィードバック」として重いクエリを見つけています。私は、イベントを使用していますsp_statement_completedとsql_statement_completed、CPU_TIME上の述語フィルタを使用して、論理読み取り、など私は上の結果集計するために期待していたdatabase_nameし、query_hashすべてのインターネット上で多数の例で示されたように、結果に、私はそれが見るquery_hashすべての文のために0であります以下の表のように、EXECを使用します(読みやすくするためにタイムスタンプとクエリハッシュを短縮)。 name timestamp query_hash plan_handle statement sql_statement_completed 2016...6414 0 050056019600764... exec Shared.dbo.SyncFirm sql_statement_completed 2016...9946 0 06003d00e01e730... exec spSetUserAuth @userid; sql_statement_completed 2016...7184 0 0600e30028c9da0... exec spSetUserAuth @userid; sp_statement_completed 2016...0409 9826...578 0600c00028e6aa0... SELECT obfuscated_columns FROM dbo.SomeTable sp_statement_completed 2016...1448 8660...775 060084006d2d660... INSERT INTO dbo.SomeTable ( obfuscated_columns) EXEC(@sql) sql_statement_completed 2016...7752 0 0600f9006c23f03... exec …

1
AlwaysONは2014年から2016年に移行します
2014年には約500 DBSの20人のListnerがいます 最小限のダウンタイムと労力でこれらを移行する最良の方法は何ですか 私の考えは次のとおりです。アクセスの停止バックアップdbs復元の開始dbs復元の実行中:2014にAOGをドロップ2016に作成完了 これは簡単に見えますが、TBデータの場合、これにはしばらく時間がかかります。 > -持っているが、この見つかった 2014年から2016年までのAlwaysOn AGをアップグレードするための推奨方法を しかし、それはnietherを説明しません 誰かが助けてくれることを願っています


1
AlwaysOn AGを2014年から2016年にアップグレードする推奨方法
Availability Groups1つの同期レプリカでSQL 2014から2016 にアップグレードする場合の推奨プロセスは何ですか? 私の理解では、in-placeアップグレードはデータベースの専門家の間ではあまり好まれていません。でin-placeアップグレードを回避する方法はありますAvailability Groupsか?2016サーバーを既存の2014可用性グループに参加させ、そこでフェイルオーバーしてから、他のインスタンスの1つを「強制終了」してアップグレードする可能性はありますか?(例えば、同じホストでSQLをサイドバイサイドで削除/再インストールすることにより) 他に考慮すべきアップグレードシナリオはありますか? 理想的なソリューションは、常に2つのonlineレプリカがあり、in-placeアップグレードを行う必要がないことです。

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
テーブル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)この方法でテーブルを作成する主な利点は、使用中に本番テーブルで過度の作業を実行しないようにすることです。当然、ステージングテーブルでインデックスを再構築でき、再構築されたインデックスをテーブルと共に本番用インデックスに切り替えることができれば、とても嬉しく思います。

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
この状況で、テーブル変数がクエリのパフォーマンスをどのように向上させているのですか?
この特定のケースでは、以下で説明しようとしますが、テーブル変数を使用すると、テーブル変数を使用しない場合よりもパフォーマンスが向上します。 理由を知りたいのですが、可能であれば、テーブル変数を削除します。 これは、テーブル変数を使用したクエリです。 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 …

2
SQL Server 2014の突然のスローダウン/挿入なし/ハードウェアまたはインデックスに関連しない
350GBPCで約4,000万行のデータベースを実行しています。 SQL Server 2014、Win7、AMD 8350 @ 4.8GHZ、16 GBのRAM、500 GB SSD(データベースは、500 MB / 500 MBの読み取り/書き込みのスループットで、独自の500 GB SSDでホストされています)。 データベースは更新されていません。分析/読み取りを行っています。少数の作成をindexes、任意のjoin、count(*)など、私の目的のためにokです1分未満を取ります。私はデータに対していくつかのクエリを実行しており(単一の結合クエリを実行した後、40〜50回実行すると遅くなります)、1分かかった呼び出しが20分後にまだ実行されています。 私はシステムリソースを注意深く監視しておりSSD、クエリの開始時にキックインを確認できます。クエリが20〜30秒間読み取り121kB/second、次に次の20分間読み取ります。これは、CPUの問題やディスクの問題ではありません。私はRAMの容量に制限がありますが、データベースを最初にロードしたときに呼び出しは正常に実行されましたが、25分後、何も実行されません。 事実上、データベースにクエリを実行することはできませんSELECT。基本的なステートメントでさえ、呼び出しには非常に時間がかかります。インデックスの再構築と統計の更新を試みましたが、違いはありません。 私はこれについて多くの経験を持っていないので、SQLクエリが正しくない可能性があります。その場合、エラーが発生するか、または結果が0で実行を終了する可能性がありますが、どちらも発生しません。 私がやろうとしていることは、テーブルACALLSに基づいて、時間の5秒前に「TypeID」のすべてのインスタンスをカウントすることです。 SELECT ACALLS.StartTime, ACALLS.Time, ACALLS.ServerIP, ACALLS.SRVR, ACALLS.calls, ACALLS.TOKEN, COUNT(TypeID) as ExecRate FROM ACALLS INNER JOIN MAINVIEW ON MainView.TimeStamp BETWEEN ACALLS.StartTime and DATEADD(ss,-5,ACALLS.StartTime) WHERE DATEPART(hour,MainView.TimeStamp) BETWEEN 10 and 13 and CAST(MainView.TimeStamp …

2
ADODB.Connectionを使用した、TLS 1.0を使用しないSQL Server 2014へのクラシックASP接続
PCIコンプライアンスという名目でTLS 1.0が無効になっているため、32ビットのクラシックASPアプリケーションを動作させることができません。 MS / Stack Exchangeの推奨事項に従って、私はインストールしました: SQL Server 2014 SP1 CU1 .NET Framework 4.6 これにより、ASP.NETアプリケーション/ SSMSが実行されます。しかし、ADODB.Connectionオブジェクトを使用するクラシックASPアプリケーションは機能しません。 を使用する接続文字列を試しましたがProvider=SQLNCLI11;、それも役に立たないようです。共有メモリプロバイダーは、パイプの反対側に何もないことに不満を抱いています。エラーメッセージ: Microsoft SQL Server Native Client 11.0エラー「80004005」 共有メモリプロバイダー:パイプの反対側にプロセスはありません。 また、接続文字列で名前付きパイプを使用してみたところ、Provider=SQLNCLI11;Server=np:\\.\pipe\MSSQL$SQLEXPRESS\sql\query;Database=northwind;Trusted_Connection=Yes;次のエラーメッセージが表示されました。 Microsoft SQL Server Native Client 11.0エラー「80004005」 名前付きパイププロバイダー:パイプの反対側にプロセスはありません。 注意が必要なADODBのパッチはありますか?名前付きパイプを他の方法などで使用することを検討すべきですか?(ただし、TLS設定に関係なく、共有メモリが機能しない理由については少し困惑しています) コメントからの更新: WebサーバーとSQL Serverは同じボックスにあります。 これはSQLExpress名前付きインスタンスです。TLS 1.0を有効にして動作する接続文字列は次のとおりです。 "Driver={SQL Server}; Server=.\SQLExpress; Database=northwind; Trusted_Connection=Yes; Integrated_Security=True;" 私も試しました: "Provider=SQLNCLI11; Server=.\SQLExpress; Database=northwind; Trusted_Connection=Yes;" TLS …

2
新しいデータセンターへのデータベースの移動
私の会社はインフラストラクチャを新しいデータセンターに移動しています。新しい環境が稼働する準備ができるまで、新しいサーバーのデータベースを現在の運用データベースと同期させる最善の方法を見つけようとしています。私はフルタイムのDBAではなく、いくつかの調査を行いました。私が読んだことから、国境を越えたレプリケーションのセットアップが私たちのニーズに最適であるように見えます。 詳細:本番DBのサイズは約90 GBで、Robocopyを使用すると、そのコピーを新しいサーバーの1つに移動するのに約9時間かかりました。現在の本番データベースは、移行プロセス全体を通じてオンラインでアクセス可能な状態を維持する必要があります。これは単純なリカバリであるため、データベースミラーリングは使用できません。 トランザクションレプリケーションは、データベースの同期を維持するための最良の方法ですか? 私の計画: (完了)現在のデータベースとログを新しいサーバーに転送し、SQL Serverの新しいインスタンスにアタッチします 開発データベースマシンでディストリビューターをセットアップし、本番データベースからそれに発行します。 毎晩1回、ディストリビューターからプッシュされる更新を受け入れる新しいデータベースマシンでサブスクライバーを作成します。 私の心には2つあります。トランザクションレプリケーションでは、パブリッシュされた各テーブルに主キーがあり、本番データベースのテーブルの多くに主キーが定義されていないことが必要です。私の主な関心事はデータベースを同期させることだけなので、これはそれほど大きな問題になるとは思いません。データベースを使用するさまざまなアプリケーションを後でデータでテストしますが、それが深刻な問題ではないことを確認したいと思います。次に、関連するシステムDBも、マスターなどの元のインスタンスから移動する必要がありますか?新しい環境でActive Directoryのセットアップに移行するので、ユーザーなどは気にしませんが、システムDBの必要性についてはわかりません。 そして一般的に、私はこれらの概念を正しく把握していますか?

2
複数のディスクに完全バックアップを作成できますか?
現在、私は1つのバックアップファイルIMTDB.bakしか持っておらず、それはデータベース自体と同じHDDにあります。このDBバックアップを本質的に別のディスクに「コピー」して冗長性を高めたいのですが、「サーバーのバックアップに失敗しました。メディアは2つのメディアファミリをサポートするようにフォーマットされています」というエラーが表示されます。これは、バックアップを作成したときに、1つのドライブにバックアップを配置することのみを目的としており、遡って追加することはできないことを意味していると思います。バックアップをこの別のドライブに移行したいのですが(実際にはコピーするだけです)、現在のバックアップを削除する必要はありません。 私は何をしますか?IMTDB.bakを他のドライブのフォルダーにコピーするだけで安全ですか?

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