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

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

2
Int / SmallintからVarcharへの暗黙の変換が発生するのはなぜですか?それは本当にカーディナリティの見積もりに影響を与えますか?
実際の実行プランでプラン表示分析(SSMS)を使用して、パフォーマンスの遅いクエリをトラブルシューティングしようとしています。分析ツールは、行数の見積もりが計画のいくつかの場所で返された結果からずれていることを指摘し、さらにいくつかの暗黙の変換警告を与えます。 これらのintからVarcharへの暗黙的な変換を理解できません-参照されるフィールドはクエリのパラメーター/フィルターの一部ではなく、関係するすべてのテーブルで列のデータ型は同じです: 以下のCardinalityEstimate警告が表示されます。 式の型変換(CONVERT_IMPLICIT(varchar(12)、[ccd]。[profileid]、0))は、クエリプランの選択で "CardinalityEstimate"に影響を与える可能性があります-このフィールドは、私のDB内のすべての整数です 式の型変換(CONVERT_IMPLICIT(varchar(6)、[ccd]。[nodeid]、0))は、クエリプランの選択で "CardinalityEstimate"に影響を与える可能性があります-このフィールドは、私のDBのあらゆる場所でsmallintです 式の型変換(CONVERT_IMPLICIT(varchar(6)、[ccd]。[sessionseqnum]、0))は、クエリプランの選択で "CardinalityEstimate"に影響を与える可能性があります-このフィールドは、DB内のあらゆる場所で小さな整数です 式の型変換(CONVERT_IMPLICIT(varchar(41)、[ccd]。[sessionid]、0))は、クエリプランの選択で "CardinalityEstimate"に影響する可能性があります-このフィールドは、DBのすべての場所で10進数です [編集]参照用のクエリと実際の実行計画は次の とおりですhttps://www.brentozar.com/pastetheplan/?id=SysYt0NzN そして、テーブルの定義。 /****** Object: Table [dbo].[agentconnectiondetail] Script Date: 1/10/2019 9:10:04 AM ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[agentconnectiondetail]( [sessionid] [decimal](18, 0) NOT NULL, [sessionseqnum] [smallint] NOT NULL, [nodeid] [smallint] NOT NULL, [profileid] [int] …

1
バッチモードのウィンドウ集計で算術オーバーフローが発生するのはなぜですか?
次のクエリは、SUM列ストアテーブルに対してウィンドウ処理を実行します1500 total rows。それぞれの値は0または1であり、INTデータ型をオーバーフローします。なんでこんなことが起こっているの? SELECT a, p, s, v, m, n, SUM(CASE WHEN n IS NULL THEN 0 ELSE 1 END) OVER (PARTITION BY s, v, a ORDER BY p) AS lastNonNullPartition FROM ( SELECT a, p, s, v, m, n, RANK() OVER (PARTITION BY v, s, a, p ORDER BY …

1
特定のテーブルのROW_OVERFLOW_DATAページを一覧表示する
ROW_OVERFLOW_DATAの行があるテーブルのページのリストを取得しようとしています。文書化されていないDMVから割り当てられたページのリストを取得できますが、sys.db_db_database_page_allocationsそのDMVの出力にROW_OVERFLOW_DATAページがリストされていないようです。私が見つけることができない他のDMVはありますか? 最小限、完全、そして(うまくいけば!)検証可能な例: USE tempdb; IF OBJECT_ID(N'dbo.t', N'U') IS NOT NULL DROP TABLE dbo.t; GO CREATE TABLE dbo.t ( rownum int NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED , on_row_data varchar(30) NOT NULL DEFAULT ('on_row_data') , off_row_data varchar(MAX) NOT NULL DEFAULT REPLICATE('A', 20000) --PLENTY BIG ENOUGH! ) WITH (DATA_COMPRESSION = NONE); --not …

2
MAXDOP = 1、クエリヒントと並列処理のコストしきい値
インスタンスがMAXDOP1に設定されていて、クエリヒントを使用して特定のクエリを並列化できる場合、SQLは並列処理のコストしきい値を使用して、実際に並列化するかどうかを決定しますか? このリンクはCTFP MAXDOPが1の場合は無視されることを示唆していますが、私はこの特定の情報を掘り下げることができませんでした。これは、クエリのヒントなしでは意味がありませんMAXDOP。 これら2つのリクエストの予想される動作を誰かに教えてもらえますか? 例1: Instance Maxdop: 1 CTFP: 50 Query hint: Maxdop=2 Query cost: 30 例2: Instance Maxdop: 1 CTFP: 50 Query hint: Maxdop=2 Query cost: 70

1
N'Șc 'は、Latin1_General_CI_AS照合を使用してN'C'の重複キーを検討しました
NVARCHAR(50)列を含む一意のキーを持つテーブルがあります(正しいかどうかはわかりますが、あります)。そのため、挿入しようとすると、ȘcまたはC(挿入の順序は関係ありません)、照合の問題により2番目の挿入で中断します。ここにエラーがあります: (1行が影響を受けました)メッセージ2601、レベル14、状態1、行16一意のインデックス 'IX_TestT'を持つオブジェクト 'dbo.testT'に重複するキー行を挿入できません。重複するキーの値は(C)です。 返品を選択: データベースのデフォルトの照合はLatin1_General_CI_ASです。既存の構造をあまり変更せずに、その解決方法をしばらく探しましたが、機能する方法を見つけることができませんでした。さまざまな照合順序と組み合わせを試しましたが、すべて失敗します。まだ展開されていないキャラクターの展開などについて(こことここ)を読んでください。これは、問題を再現するために使用しているサンプルコードです。自由に変更し、これを解決するのに役立つと思われるものをお勧めします。 CREATE TABLE testT ( [Default_Collation] [NVARCHAR] (50) COLLATE DATABASE_DEFAULT, [Latin1_General_CI_AS] [NVARCHAR] (50) COLLATE Latin1_General_CI_AS, [Latin1_General_CI_AI] [NVARCHAR] (50) COLLATE Latin1_General_CI_AI, [SQL_Collation] [NVARCHAR] (50) COLLATE SQL_Latin1_General_CP1_CI_AS); CREATE UNIQUE CLUSTERED INDEX [IX_TestT] ON [dbo].[testT] ([Default_Collation]) ON [PRIMARY] GO INSERT INTO testT SELECT N'Șc', --COLLATE Latin1_General_CI_AS N'Șc', --COLLATE …

1
NOLOCKで変数割り当てを使用したスキャンが遅くなるのはなぜですか?
現在の環境でNOLOCKと戦っています。私が聞いた1つの議論は、ロックのオーバーヘッドがクエリの速度を低下させるというものです。そこで、このオーバーヘッドがどれだけあるかを確認するためのテストを考案しました。 NOLOCKが実際にスキャン速度を低下させることを発見しました。 最初は嬉しかったのですが、今は混乱しています。私のテストはどういうわけか無効ですか?NOLOCKは実際にはわずかに高速なスキャンを許可すべきではありませんか?ここで何が起こっているのですか? これが私のスクリプトです: USE TestDB GO --Create a five-million row table DROP TABLE IF EXISTS dbo.JustAnotherTable GO CREATE TABLE dbo.JustAnotherTable ( ID INT IDENTITY PRIMARY KEY, notID CHAR(5) NOT NULL ) INSERT dbo.JustAnotherTable SELECT TOP 5000000 'datas' FROM sys.all_objects a1 CROSS JOIN sys.all_objects a2 CROSS JOIN sys.all_objects a3 /********************************************/ …

3
ALTER TABLE権限の付与はどの程度危険ですか?
次のシナリオを想像してみてください CREATE DATABASE test GO USE test; CREATE TABLE dbo.Customer ( CustomerId INT, Email VARCHAR(100), SensitiveData VARCHAR(20) ); INSERT INTO dbo.Customer VALUES (1,'abc@foo.com','12346789'); ある時点で、testデータベースでいくつかのアクティビティを実行するETLプロセスが作成されます。 CREATE USER etlUser WITHOUT LOGIN; /*For demo purposes*/ CREATE TABLE dbo.StagingTable ( StagingTableId INT, SomeData VARCHAR(100), ) GRANT UPDATE,INSERT,DELETE,SELECT,ALTER ON dbo.StagingTable TO etlUser; DENY SELECT ON …

2
SQL Serverデータベースはいつクエリを受け入れる準備ができていますか?
SQL Serverエラーログファイルで、次の行を見つけました。 2018-02-22 14:10:58.95 spid17s Starting up database 'msdb'. 2018-02-22 14:10:58.95 spid16s Starting up database 'ReportServer'. 2018-02-22 14:10:58.95 spid18s Starting up database 'ReportServerTempDB'. 2018-02-22 14:10:58.95 spid19s Starting up database 'XYZ'. この時間より前にデータベースXYZのステータスを確認するとONLINE、次のステートメントが使用されています。 SELECT state_desc FROM sys.databases WHERE name='XYZ' ...しかし、C#アプリケーションを使用してこのデータベースに接続しようとすると、データベースに接続できません。 エラーは: ユーザー「asd」のログインに失敗しました。 理由:明示的に指定されたデータベースを開くことができませんでした。 3つの異なるユーザー(Windowsユーザー、sa、アプリケーションに定義されたSQL Serverユーザー)を試しました。OSの起動時にアプリケーションを実行すると問題が発生しますが、起動後に手動で起動してもエラーは発生しないため、SQL Serverの設定とファイアウォールの設定はすべて正しいと思います。 この前に、サービスステータスが実行されていることも確認しました。 データベースが実際にオンラインでクエリの準備ができていることを確認するために、他に何をチェックする必要がありますか? 時間を遅らせるのではなく、データベースにクエリを実行しても問題ないことを示すキーを探しています(明確な理由に基づいていなくても)。 エラーログをスキャンして "Starting up …

1
SQL Serverのdynamic-sqlで識別子を引用する関数は何ですか?
動的SQL生成のために識別子を安全に引用するSQL Serverの方法は何ですか。 MySQLには quote_identifier PostgreSQLには quote_ident 動的に生成されたステートメントに動的に生成された列名を指定すると、列自体がSQLインジェクション攻撃ではないことをどのように確認できますか? SQL文があるとします。 SELECT [$col] FROM table; これは本質的に同じです 'SELECT [' + $col + '] FROM table;' インジェクション攻撃を阻止するもの $col = "name] FROM sys.objects; \r\n DROP TABLE my.accounts; \r\n\ --"; その結果 SELECT [name] FROM sys.objects; DROP TABLE my.accounts; -- ] FROM table;

2
アンインストールする予定がない場合、セットアップブートストラップフォルダー内のログおよび更新キャッシュフォルダーを削除できますか?
SQL Serverのいくつかのバージョンをテストに使用し、ラップトップにインストールしています(2012、2014、2016、2017)。先日、更新(SP、CU)間で以前のバージョンのファイルを含むフォルダーがあることに気付きました。すべてのバージョンで、実際にはかなりのスペースが使用されています。 (C:\ Program Files(x86)\ Microsoft SQL Server \にあります) 110\Setup Bootstrap\Log - 91.8 MB (818 files) 110\Setup Bootstrap\Update Cache - 608 MB (2,382 files) (以下のフォルダはすべてC:\ Program Files \ Microsoft SQL Server \にあります) 110\Setup Bootstrap\Log - 1.18 GB (3,715 files) 110\Setup Bootstrap\Update Cache - 9.58 GB (14,766 files) 120\Setup Bootstrap\Log - …

1
bcpコマンド「 」付近の構文が正しくありません。キャラクターは実際には「ä」
私が持っている MSSQLサーバとMSSQL・ツールのUbuntu(Linux)の上に設置します。次のコマンドラインを使用してbcpコマンドでデータをエクスポートしようとすると、 bcp DBname.dbo.Täble_Name out Täble_Name -c -k -S127.0.0.1 -Usa -PpassWord -r ~ 私はこのエラーを受け取ります: SQLState = 37000、NativeError = 102 エラー= [Microsoft] [ODBC Driver 13 for SQL Server] [SQL Server]「 」付近の構文が正しくありません。 �ですä。 私は囲む場合はTäble_Name角括弧で: bcp DBname.dbo.[Täble_Name] out Täble_Name -c -k -S127.0.0.1 -Usa -PpassWord -r ~ オブジェクト名でこのエラーが発生します: SQLState = S0002、NativeError = 208 エラー= …

2
Linux上のSQL Serverが初期起動時にハングし、エラーが発生せず、新しい/更新されたErrorLogファイルがない
Linux(Ubuntu 16.04)でSQL Server 2017、Release Candidate 2(RC2)を使用しています。 サーバーが起動すると、通常SQL Serverも起動します。しかし、何らかの理由で、SQL Serverが起動しなくなります。少なくともsqlcmdを使用して接続することはできません。今度は、ODBCタイムアウト(「Sqlcmd:エラー:SQL Server用Microsoft ODBCドライバー13」)エラーが毎回発生します。 Login timeout expired. TCP Provider: Error code 0x2749. A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server …

2
クラスター化インデックスの選択-PKまたはFK?
私が持っているSQL Serverの2014台をその次のようになります。 OrderId int not null IDENTITY --this is the primary key column OrderDate datetime2 not null CustomerId int not null Description nvarchar(255) null 私のチームの一部の人々は、クラスター化インデックスをオンOrderIdにすることを提案しましたが、次の理由から、CustomerId+のOrderId方が適切な選択だと思います。 ほとんどすべてのクエリはWHERE CustomerId = @param、ではなく、OrderId CustomerIdはCustomerテーブルへの外部キーなので、CustomerId結合を高速化する必要があるクラスタ化インデックスを持つ 一方でCustomerId一意ではない、追加の持つOrderIdインデックスで指定した列は、(我々が使用できる一意性を保証するUNIQUEものを2列にクラスタ化インデックスを作成するときに一意性を持っていないのオーバーヘッドを回避するために、キーワードを) データが挿入されると、CustomerIdそしてOrderId決して変更、これらの行は、最初の書き込みの後に動き回ることはないので。 データアクセスは、デフォルトですべての列を要求するORMを介して行われるため、に基づくクエリが着信CustomerIdすると、クラスター化インデックスは追加の作業なしですべての列を提供できます。 んCustomerIdとOrderId最良の選択肢のようなアプローチの音は、上記に与えられましたか?それとも、OrderIdそれ自体が一意性を保証する単一の列であるため、それ自体が優れていますか? 現在、テーブルにはにクラスター化インデックスがOrderIdあり、非クラスター化インデックスがにありますが、CustomerIdカバーしていません。そのため、ORMを使用しており、すべての列が要求されているため、それらを取得するのは追加の作業です。したがって、この投稿では、CIを改善してパフォーマンスを向上させることを検討しています。 DBでのアクティビティは、約85%が読み取り、15%が書き込みです。

1
GUIクライアントからローカルMS SQL Serverへの接続
SQLサーバーとデータベースサーバーは初めてです。最近、SQL Server Expressを使用しており、Windows上のSQL Server Management Studioを使用してデータベースにアクセスしています。Linuxマシンで同様のセットアップを実現しようとしています。 マシン上にローカルSQL Serverインスタンスを作成し、データベースをクエリするためのGUIクライアントとしてSQLectronを使用します。Manjaro Linuxを使用しているので、AURからパッケージをインストールします。 これまでのところ私がインストールされているmssql-server、mssql-toolsとsqlectron-gui。sudo /opt/mssql/bin/mssql-conf setupローカルサーバーをセットアップするために(私は信じています)コマンドを実行しました。その後、コマンドを実行すると次のようにsystemctl status mssql-server返されます。 [kev @ XPS-Manjaro〜] $ systemctl status mssql-server ●mssql-server.service-Microsoft SQL Serverデータベースエンジン ロード済み:ロード済み(/usr/lib/systemd/system/mssql-server.service; enabled; vendor preset:disabled) アクティブ:2017年8月23日水曜日13:43:49 IST以降アクティブ(実行中)。2時間42分前 ドキュメント:https://docs.microsoft.com/en-us/sql/linux メインPID:9130(sqlservr) タスク:165 CGroup:/system.slice/mssql-server.service ├─9130/ opt / mssql / bin / sqlservr └─9144/ opt / mssql / bin / sqlservr …

3
運用SQL Serverの主要なパフォーマンスの問題、これをトラブルシューティングするにはどうすればよいですか?
この質問は、基本的にこの質問の補足質問です 。SQLServer 2016の奇妙なパフォーマンスの問題 このシステムで生産性が向上しました。前回の投稿以降、このSQL Serverには別のアプリケーションデータベースが追加されました。 これらはシステム統計です: 128 GBのRAM(SQL Serverの場合は最大110 GBのメモリ) 4コア@ 2.6 GHz 10 GBitネットワーク接続 すべてのストレージはSSDベースです プログラムファイル、ログファイル、データベースファイル、およびtempdbは、サーバーの個別のパーティションにあります。 Windowsサーバー2012 R2 VMwareバージョンHPE-ESXi-6.0.0-Update3-iso-600.9.7.0.17 VMware Toolsバージョン10.0.9、ビルド3917699 Microsoft SQL Server 2016(SP1)(KB3182545)-13.0.4001.0(X64)2016年10月28日18:17:30 Copyright(c)Microsoft Corporation Standard Edition(64-bit)on Windows Server 2012 R2 Standard 6.3(Build 9600:) (ハイパーバイザー) 現在、システムに大きなパフォーマンスの問題があります。非常に高いCPU使用率とスレッド数: アクティビティモニターの待機統計(あまり信頼性がないことはわかっています) sp_blitzfirstの結果: sp_configureの結果: サーバーの詳細設定(ドイツ語のみの不幸) MAXDOP設定は私が変更しました。 これはおそらくSQL Server自体の問題ではないことを認識しています。これはおそらく、仮想化(vmware)、ネットワーク関連(すでにテスト済み)、またはアプリケーション自体の問題です。私はそれをさらに釘付けにしたいだけです。 ASYNC_NETWORK_IOが高いと、sqlserverプロセスのスレッド数が多くなりますか?スレッドを閉じることができないため、多くのワーカーが急上昇すると思います。そうですか? 必要な追加情報を提供します。よろしくお願いします! 編集: の結果 …

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