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

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

4
SQL Server 2017のインストールのヘルプ-VS Shellのインストールが終了コード1638で失敗しました
このエラーに対処する方法に関する提案: TITLE: Microsoft SQL Server 2017 Setup ------------------------------ The following error has occurred: VS Shell installation has failed with exit code 1638. For help, click: https://go.microsoft.com/fwlink?LinkID=20476&ProdName=Microsoft%20SQL%20Server&EvtSrc=setup.rll&EvtID=50000&ProdVer=14.0.1000.169&EvtType=0x5B39C8B9%25401434%25403 ------------------------------ BUTTONS: OK ------------------------------ これは新しいラップトップです SQL Server 2016 Express Visual Studio 2017 SSMS 2017 SQL ServerまたはVisual Studioに関連するものをすべてアンインストールしようとしました。 ログ:[3500:3970] [2017-11-03T16:25:20] e000:エラー0x80070666:新しいバージョンがインストールされている場合、製品をインストールできません。 Detailed results: Feature: Full-Text …

2
宣言された結合列の順序を変更するとソートが導入されるのはなぜですか?
同じ名前、タイプ、およびインデックスキー列を持つ2つのテーブルがあります。それらの1つには一意のクラスター化インデックスがあり、もう1つには非一意があります。 テストのセットアップ いくつかの現実的な統計を含むセットアップスクリプト: DROP TABLE IF EXISTS #left; DROP TABLE IF EXISTS #right; CREATE TABLE #left ( a char(4) NOT NULL, b char(2) NOT NULL, c varchar(13) NOT NULL, d bit NOT NULL, e char(4) NOT NULL, f char(25) NULL, g char(25) NOT NULL, h char(25) NULL --- and a …

1
SQL Server 2017でSNAPSHOT_MATERIALIZATIONを使用してビューを作成するにはどうすればよいですか?
SQL Server 2017には、いくつかの新しいストアドプロシージャがあります。 sp_refresh_single_snapshot_view – @view_name nvarchar(261)、@ rgCode intの入力パラメーター sp_refresh_snapshot_views – @rgCode intの入力パラメーター sys.messagesの新しいエントリ: 10149-ビュー定義にメモリ最適化テーブルが含まれているため、SNAPSHOT_MATERIALIZATIONを持つインデックスをビュー '%。* ls'に作成できません。 10642-SNAPSHOT_MATERIALIZATIONは、ビューのインデックスにのみ適用されるため、 '%。* ls'のインデックス '%。* ls'に設定できません。 10643 – SNAPSHOT_MATERIALIZATIONは、ビューのクラスター化インデックスにのみ適用されるため、 '%。* ls'の '%。* ls'に設定できません。 10648 – SNAPSHOT_MATERIALIZATIONは、 '%。* ls'のパーティションインデックス '%。* ls'に設定できません。 10649-SNAPSHOT_MATERIALIZATIONのクラスター化インデックス '%。* ls'を持つ '%。* ls'には非クラスター化インデックス '%。* ls'を作成できません。 10650 –スナップショットビューを更新するには、データベースでスナップショット分離を有効にする必要があります。 3760 – SNAPSHOT_MATERIALIZATIONを持つビュー '%。* ls'のインデックス …

6
データベース全体でのGETDATE()の使用の変更
オンプレミスのSQL Server 2017データベースをAzure SQLデータベースに移行する必要がありますが、かなりの制限事項があるため、いくつかの課題に直面しています。 特に、Azure SQLデータベースはUTC時間(タイムゾーンではない)でのみ機能し、現地時間を必要とするため、データベース内のGETDATE() すべての場所の使用を変更する必要があります。 私のタイムゾーンで正しく機能するローカル時間を取得するために、ユーザー定義関数を作成しました。 CREATE FUNCTION [dbo].[getlocaldate]() RETURNS datetime AS BEGIN DECLARE @D datetimeoffset; SET @D = CONVERT(datetimeoffset, SYSDATETIMEOFFSET()) AT TIME ZONE 'Pacific SA Standard Time'; RETURN(CONVERT(datetime,@D)); END 私が問題を抱えている問題はGETDATE()、すべてのビュー、ストアドプロシージャ、計算列、デフォルト値、その他の制約などでこの関数を実際に変更することです。 この変更を実装する最良の方法は何でしょうか? マネージドインスタンスの公開プレビュー中です。それでも同じ問題がGETDATE()発生するため、この問題は解決しません。Azureへの移行は必須です。このデータベースは、常にこのタイムゾーンで使用されます(使用されます)。

1
ファイルパスが間違っているため、バックアップ時にSQL Server 2017がクラッシュする
データベースを復元しようとしていて、SQL Serverがクラッシュし続けました。SSMSで、ネットワークトランスポートエラーが発生したというメッセージが表示されます(接続がクラッシュしてクラッシュしました)。ログを確認したところ、SQL Serverが予期せず閉じられただけです。次に、サービスを再起動する必要があります。 GUIが実行しようとしているスクリプトに問題を絞り込みました。問題は、ログの末尾のバックアップを取るときに、バックアップファイルへのパスが間違っていることです。そのはずD:\mapbenefits\... BACKUP LOG [mapbenefits] TO DISK = N'D:mapbenefits_LogBackup_2019-02-21_13-58-24.bak' WITH NOFORMAT, NOINIT, NAME = N'mapbenefits_LogBackup_2019-02-21_13-58-24', NOSKIP, NOREWIND, NOUNLOAD, NORECOVERY , STATS = 5 2つの質問があります。 このパスを修正するにはどうすればよいですか?サーバー設定にアクセスしようとしましたが、バックアップパスはD:スラッシュなしです。スラッシュを追加すると、GUIによって削除されます。これはSSMS v17.9.1です。私は選ぶことができD:\mapbenefits\、それはうまくいきますが、私は欲しいですD:\DATABASE\... これはバグですか?パスが正しく入力されていないという理由だけで、SQLサーバーがクラッシュする必要がありますか?ファイルパスを修正したら、問題はありません。ファイルパスを改造するだけでいつでも再現できます。 バージョンを確認するクエリを実行するとCU13が取得されますが、設定に入るとバージョン14.0.1000.169が表示されます。 これはバグのようで、再現可能であるため、ここに投稿しました:https : //feedback.azure.com/forums/908035-sql-server/suggestions/36920542-incorrect-filepath-with-backup-log-command-原因

1
選択を追加するときに自己参照スカラー関数のネストレベルを超えました
目的 自己参照関数のテスト例を作成しようとすると、あるバージョンが失敗し、別のバージョンが成功します。 唯一の違いはSELECT、関数本体に追加されることです。その結果、両方で異なる実行計画が作成されます。 機能する機能 CREATE FUNCTION dbo.test5(@i int) RETURNS INT AS BEGIN RETURN( SELECT TOP 1 CASE WHEN @i = 1 THEN 1 WHEN @i = 2 THEN 2 WHEN @i = 3 THEN dbo.test5(1) + dbo.test5(2) END ) END; 関数を呼び出す SELECT dbo.test5(3); 返品 (No column name) 3 機能しない機能 CREATE …

4
データベースに挿入が1つしかない場合、可能なすべての列の組み合わせにインデックスを付けるのは悪いことですか?
私は、大規模な選択クエリを必要とするレポートシステムに取り組んでいますが、データベースは一度しか入力されていません。データベース管理システムはMicrosoft SQL Server 2017です。このようなシステムを設計するより良い方法はおそらくありますが、理論的にこれにアプローチしましょう。 理論的に言えば: 非常に大きなデータベース(複数のテーブルに1億5000万行以上)がある場合 また、データベースには一度しかデータが入力されないと想定できます。 可能なすべての列の組み合わせにインデックスを付けると、選択クエリのパフォーマンスに悪影響が出る可能性がありますか?

3
サーバーの再起動後にSQL Server分散可用性グループデータベースが同期しない
SQL Serverで大規模なアップグレードを実行する準備ができており、先に進む前に解決しようとしている分散可用性グループの異常な動作に気付いています。 先月、リモートセカンダリサーバーをSQL Server 2016からSQL Server 2017にアップグレードしました。このサーバーは、複数の分散可用性グループ(DAG)と個別の可用性グループ(AG)の一部です。このサーバーをアップグレードしたときに、サーバーが読み取り不能な状態になることを認識していなかったため、この1か月間はプライマリサーバーのみに依存していました。 今後のアップグレードの一環として、CU 4パッチをサーバーに適用し、再起動しました。サーバーがオンラインに戻ったとき、パッチを適用したばかりのセカンダリは、すべてのDAG / AGが問題なく同期していることを示しました。 ただし、プライマリーは非常に異なるストーリーを示していました。報告していた 別のAGが問題なく同期していた しかし、DAGは非同期/非正常状態でした 最初にパニックに陥った後、次のことを試みて、DAGで再び同期を取りました。 プライマリから、データの移動を停止して再開しました。これはデータの同期を開始しませんでした。 セカンダリ(パッチを適用したばかりの)ALTER DATABASE [<database] SET HADR RESUME;で実行しました-エラーなしで実行されますが、同期は再開されませんでした データを再び同期する最後の試みは、セカンダリにログインし、SQL Serverサービスを手動で再起動することでした。サービスを手動で再起動するのは少し極端に思えます。サーバーを再起動すれば十分だったと思うからです。 再起動後にDAGがセカンダリへの同期を開始しないという問題に誰かが遭遇しましたか?もしそうなら、それはどのように解決されましたか? SQL Serverのエラーログとセカンダリサーバーのイベントビューアーの両方を確認しましたが、目に見える異常はありませんでした。



4
SQL Serverは、15秒以上かかるI / O要求の発生を検出しました
実稼働SQL Serverには、次の構成があります。 3台のDell PowerEdge R630サーバーを可用性グループに統合3台すべてがRAIDアレイである単一のDell SANストレージユニットに接続されている 時々、PRIMARYで次のようなメッセージが表示されます。 SQL Serverは、データベースID 8 のファイル[F:\ Data \ MyDatabase.mdf]で完了するのに15秒以上かかるI / O要求が11回発生しました。OSファイルハンドルは0x0000000000001FBCです。 最新の長いI / Oのオフセットは0x000004295d0000です。 長いI / Oの継続時間は37397ミリ秒です。 パフォーマンストラブルシューティングの初心者です ストレージに関連するこの特定の問題のトラブルシューティングで最も一般的な方法またはベストプラクティスは何ですか?このようなメッセージの根本原因を絞り込むには、どのパフォーマンスカウンター、ツール、モニター、アプリなどを使用する必要がありますか?役立つ可能性のある拡張イベント、または何らかの種類の監査/ログがありますか?

2
500データベースのSQL Server 2017-CU9以降頻繁にAGが切断する
みなさん、こんにちは。あなたの助けに感謝します。SQL Server 2017可用性グループで課題が発生しています。 バックグラウンド 会社は小売B2Bバックエンドソフトウェアです。約500の単一テナントデータベース、およびすべてのテナントで使用される5つの共有データベース。ワークロードの特性は主に読み取られ、データベースの大部分のアクティビティは非常に低くなっています。 コロケーションでホストされている物理的な運用サーバーは、共有SAN / FCI構成のWindows Server 2012上のSQL Server 2014 Enterpriseから、2ソケット/ 32コア/ 768 GB RAMおよびローカルのWindows Server 2016上のSQL Server 2017 Enterpriseに最近アップグレードされましたAlwaysOn AGを使用したSSDドライブ。AGトラフィックは、クロスケーブル接続で専用の10G NICポートを使用します。 それらの要件は、すべてのデータベースが一緒にフェールオーバーすることであるため、すべてを単一のAGに配置する必要がありました。これは、同一サーバー上の単一の読み取り不可能な同期レプリカです。 新しいサーバーは、2018年6月から運用されています。最新のCU(当時のCU7)とWindowsの更新プログラムがインストールされ、システムは正常に機能していました。約1か月後、サーバーをCU7からCU9に更新した後、サーバーは優先度の高い順に以下の課題に気付き始めました。 SQL Sentryを使用してサーバーを監視しており、物理的なボトルネックは観察されていません。すべての重要な指標は良いようです。CPUは平均20%、IO時間は通常1ミリ秒未満、RAMは完全に使用されておらず、ネットワークは1%未満です。 課題 フェールオーバー後に症状は良くなるようですが、どちらのサーバーがプライマリであるかに関係なく、数日以内に戻ってきます。症状は両方のサーバーで同じです。 次のような散発的なクライアントタイムアウトと接続障害 ...接続の確立中にエラーが発生しました... または 実行タイムアウトが切れました 場合によっては、これらは最大40秒間続き、その後沈静化します。 トランザクションログバックアップジョブの完了には、以前よりも10倍時間がかかります。以前は、500個すべてのデータベースのログをバックアップするのに2〜3分かかりましたが、現在では15〜25分かかります。バックアップ自体が良好なスループットで正常に実行されることを確認しました。ただし、1つのログのバックアップが完了してから次のログを開始するまでにわずかな遅延があります。非常に低い値から始まりますが、1〜2日で2〜3秒かかります。500個のデータベースを乗算すると、違いがあります。 時々、ランダムに見える一部のデータベースが、手動フェールオーバー後に「同期していない」状態のままになります。これを解決する唯一の方法は、セカンダリレプリカでSQL Serverサービスを再起動するか、これらのデータベースを削除してAGに再結合することです。 CU10で導入された別の問題(CU11では解決されていません):master.sys.databasesでのブロッキングのセカンダリタイムアウトへの接続、およびセカンダリレプリカにSSMSオブジェクトエクスプローラーを使用することさえできません。根本的な原因は、Microsoft SQL Server VSSライターが次のクエリを発行してブロックしているようです。 select name, recovery_model_desc, state_desc, CONVERT(integer, is_in_standby), ISNULL(source_database_id,0) from …

5
未使用領域を再利用しようとすると、SQL Serverで使用領域が大幅に増加します
実稼働データベースに525 GBのサイズのテーブルがあり、そのうち383 GBは未使用です。 このスペースの一部を回収したいのですが、実稼働DBをいじる前に、より少ないデータでテストDBの同一のテーブルでいくつかの戦略をテストしています。この表には同様の問題があります。 テーブルに関するいくつかの情報: フィルファクターは0に設定されます 約30列あります 列の1つはイメージタイプのLOBであり、数KBから数百MBのサイズのファイルを格納しています テーブルには仮想インデックスが関連付けられていません サーバーは、SQL Server 2017(RTM-GDR)(KB4505224)-14.0.2027.2(X64)を実行しています。データベースはSIMPLE復旧モデルを使用しています。 私が試したいくつかのこと: インデックスの再構築:ALTER INDEX ALL ON dbo.MyTable REBUILD。これによる影響はごくわずかです。 インデックスの再編成:ALTER INDEX ALL ON dbo.MyTable REORGANIZE WITH(LOB_COMPACTION = ON)。これによる影響はごくわずかです。 LOB列を別のテーブルにコピーし、列をドロップし、列を再作成し、データをコピーしました(この記事で概説したように、未使用スペースのSQL Serverテーブルの解放)。これにより、未使用のスペースが減少しましたが、使用済みのスペースに変換するだけのようです。 bcpユーティリティを使用して、テーブルをエクスポート、切り捨て、再読み込みします(この投稿で説明されているように、テーブルの未使用スペースを解放する方法)。これにより、未使用スペースが削減され、使用済みスペースが上のイメージと同程度に増加しました。 推奨されていませんが、DBCC SHRINKFILEおよびDBCC SHRINKDATABASEコマンドを試してみましたが、これらは未使用の領域に影響を与えませんでした。 実行DBCC CLEANTABLE('myDB', 'dbo.myTable')しても違いはありませんでした 画像とテキストのデータ型を維持しながら、データ型をvarbinary(max)とvarchar(max)に変更した後、上記のすべてを試しました。 新しいデータベースの新しいテーブルにデータをインポートしようとしましたが、これも未使用スペースを使用済みスペースに変換するだけでした。この投稿でこの試みの詳細を概説しました。 これらが期待できる結果である場合、実稼働DBでこれらの試行を行いたくないので、 これらの試行のいくつかの後、未使用スペースが使用済みスペースに変換されるのはなぜですか?私は内部で何が起こっているのかよく理解していないように感じます。 使用済みスペースを増やすことなく、未使用スペースを減らすためにできることは他にありますか? 編集:テーブルのディスク使用量レポートとスクリプトは次のとおりです。 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON …

5
多くのヌル可能整数を1:1からバイナリ文字列に変換する最速の方法は何ですか?
ワークロードの一部では、不気味なハッシュアルゴリズムを実装するCLR関数を使用して行を比較し、列の値が変更されたかどうかを確認します。CLR関数はバイナリ文字列を入力として受け取るため、行をバイナリ文字列に変換する高速な方法が必要です。全ワークロード中に約100億行をハッシュすると予想されるため、このコードを可能な限り高速にしたいと思います。 異なるスキーマを持つ約300のテーブルがあります。この質問の目的のために、32のNULL入力可能INT列の単純なテーブル構造を想定してください。サンプルデータと、この質問の最後に結果をベンチマークする方法を提供しました。 すべての列の値が同じ場合、行は同じバイナリ文字列に変換する必要があります。列の値が異なる場合、行は異なるバイナリ文字列に変換する必要があります。たとえば、次のような単純なコードは機能しません。 CAST(COL1 AS BINARY(4)) + CAST(COL2 AS BINARY(4)) + .. NULLを正しく処理しません。場合COL1NULLが行1のためのものであり、COL2行2のためにNULLである、両方の行がNULL文字列に変換されます。NULLを正しく処理することは、行全体を正しく変換することの最も難しい部分だと思います。INT列に許可されるすべての値が可能です。 質問を先取りするには: それが重要な場合、ほとんどの時間(90%+)の列はNULLになりません。 CLRを使用する必要があります。 この数の行をハッシュする必要があります。ハッシュを維持できません。 CLR関数があるため、変換にバッチモードを使用できないと思います。 32個のNULL可能INT列をBINARY(X)or VARBINARY(X)文字列に変換する最速の方法は何ですか? 約束どおりのサンプルデータとコード: -- create sample data DROP TABLE IF EXISTS dbo.TABLE_OF_32_INTS; CREATE TABLE dbo.TABLE_OF_32_INTS ( COL1 INT NULL, COL2 INT NULL, COL3 INT NULL, COL4 INT NULL, COL5 INT NULL, COL6 …

2
一時テーブルは、熱心なスプールよりもハロウィーンの問題に対するより効率的なソリューションであるのはなぜですか?
行がターゲットテーブルにない場合にのみソーステーブルから行を挿入する次のクエリを検討してください。 INSERT INTO dbo.HALLOWEEN_IS_COMING_EARLY_THIS_YEAR WITH (TABLOCK) SELECT maybe_new_rows.ID FROM dbo.A_HEAP_OF_MOSTLY_NEW_ROWS maybe_new_rows WHERE NOT EXISTS ( SELECT 1 FROM dbo.HALLOWEEN_IS_COMING_EARLY_THIS_YEAR halloween WHERE maybe_new_rows.ID = halloween.ID ) OPTION (MAXDOP 1, QUERYTRACEON 7470); 考えられる1つの形状には、マージ結合と積極的なスプールが含まれます。ハロウィーンの問題を解決するために、熱心なスプールオペレーターがいます。 私のマシンでは、上記のコードは約6900ミリ秒で実行されます。テーブルを作成するための再現コードは、質問の下部に含まれています。パフォーマンスに不満がある場合は、熱心なスプールに頼るのではなく、一時テーブルに挿入される行をロードしようとするかもしれません。可能な実装の1つを次に示します。 DROP TABLE IF EXISTS #CONSULTANT_RECOMMENDED_TEMP_TABLE; CREATE TABLE #CONSULTANT_RECOMMENDED_TEMP_TABLE ( ID BIGINT, PRIMARY KEY (ID) ); INSERT INTO #CONSULTANT_RECOMMENDED_TEMP_TABLE …

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