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

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

3
FROM句がなく、エラーにならないのはなぜですか?
そのため、タイプミスのあるサブクエリを含むクエリがあります。FROM句がありません。しかし、実行してもエラーにはなりません!なぜ!? SELECT 1 ,r.id ,'0D4133BE-C1B5-4141-AFAD-B171A2CCCE56' ,GETDATE() ,1 ,'Y' ,'N' ,oldItem.can_view ,oldItem.can_update FROM Role r JOIN RoleObject oldReport ON r.customer_id = oldReport.customer_id JOIN RoleItem oldItem ON oldReport.id = oldItem.role_object_id AND r.id = oldItem.role_id WHERE r.id NOT IN (SELECT role_id WHERE role_object_id = '0D4133BE-C1B5-4141-AFAD-B171A2CCCE56') AND oldReport.id = '169BA22F-1614-4EBA-AF45-18E333C54C6C'

1
どうやら、私のCLRアセンブリ関数がデッドロックを引き起こしていますか?
私たちのアプリケーションは、OracleデータベースまたはMicrosoft SQL Serverデータベースと同等にうまく機能する必要があります。これを容易にするために、クエリ構文を均質化する少数のUDFを作成しました。たとえば、SQL ServerにはGETDATE()があり、OracleにはSYSDATEがあります。それらは同じ機能を実行しますが、それらは異なる単語です。共通の関数名で関連するプラットフォーム固有の構文をラップする、両方のプラットフォーム用のNOW()と呼ばれるラッパーUDFを作成しました。他にもそのような機能がありますが、その一部は本質的に均質化のためだけに存在します。残念ながら、これにはSQL Serverのコストがかかります。インラインスカラーUDFはパフォーマンスに悪影響を及ぼし、並列処理を完全に無効にします。別の方法として、同じ目標を達成するためにCLRアセンブリ関数を作成しました。これをクライアントに展開すると、デッドロックが頻繁に発生し始めました。この特定のクライアントはレプリケーションと高可用性の技術を使用しているため、ここで何らかのやり取りが行われているのではないかと思います。CLR関数を導入すると、このような問題がどのように発生するのか理解できません。参考までに、元のスカラーUDF定義と、C#の置換CLR定義およびそのSQL宣言を含めました。また、それが役立つ場合に提供できるデッドロックXMLもあります。 元のUDF CREATE FUNCTION [fn].[APAD] ( @Value VARCHAR(4000) , @tablename VARCHAR(4000) = NULL , @columnname VARCHAR(4000) = NULL ) RETURNS VARCHAR(4000) WITH SCHEMABINDING AS BEGIN RETURN LTRIM(RTRIM(@Value)) END GO CLRアセンブリ関数 [SqlFunction(IsDeterministic = true)] public static string APAD(string value, string tableName, string columnName) { return value?.Trim(); } …


3
SQL Serverは、コミットする前に、トランザクション内のトランザクションへのDDLを許可(可視化)しますか?
PostgreSQLでは、いくつかのテストデータを使用してテーブルを作成し、トランザクションでそれを別のタイプの新しい列に移行することで、1回のテーブル書き換えでCOMMIT、 CREATE TABLE foo ( a int ); INSERT INTO foo VALUES (1),(2),(3); に続く、 BEGIN; ALTER TABLE foo ADD COLUMN b varchar; UPDATE foo SET b = CAST(a AS varchar); ALTER TABLE foo DROP COLUMN a; COMMIT; ただし、MicrosoftのSQL Serverでは同じことがエラーを生成するようです。この作業の比較デシベルのフィドル、ADD(列)コマンドは、トランザクションの外にあります -- txn1 BEGIN TRANSACTION; ALTER TABLE foo ADD b varchar; COMMIT; …

2
単一の行をアンピボットするときに、役に立たない並列分岐をどのようにして取り除くことができますか?
少数のスカラー集計をアンピボットする次のクエリを考えてみます。 SELECT A, B FROM ( SELECT MAX(CASE WHEN ID = 1 THEN 1 ELSE 0 END) VAL1 , MAX(CASE WHEN ID = 2 THEN 1 ELSE 0 END) VAL2 , MAX(CASE WHEN ID = 3 THEN 1 ELSE 0 END) VAL3 , MAX(CASE WHEN ID = 4 THEN 1 …

1
欠落している非クラスター化インデックスは既にクラスター化インデックスの一部です
実行速度の遅いクエリをデバッグしています。実行プランでは、非クラスタ化インデックスが推奨され、51.6648の影響があります。ただし、非クラスター化インデックスには、主キー(PK)複合クラスター化インデックスに既に含まれている列のみが含まれます。 これは、インデックス内の列の順序が原因である可能性がありますか?つまり、クラスター化インデックスの列の選択性が最も高いものから低いものへの順序ではない場合、非クラスター化インデックスがパフォーマンスを向上させる可能性はありますか? さらに、非クラスター化インデックスには3つのPK列のうち2つだけが含まれ、3番目の列は包含列として追加されます。あるinclude非クラスタ化インデックスの使用がより最適かもしれないもう一つの理由? 以下は、私が使用しているテーブル構造の例です。 テーブル- Retailers ( RetailerID int PK, name ...) Retailer_Relation_Types ( RelationType smallint PK, Description nvarchar(50) ...) Retailer_Relations ( RetailerID int PK FK, RelatedRetailerID int PK FK, RelationType smallint PK FK, CreatedOn datetime ...) テーブルにRetailer_Relationsは、次の複合PKインデックスと推奨インデックスがあります。 CONSTRAINT PK_Retailer_Relations PRIMARY KEY CLUSTERED ( RetailerID ASC, RelatedRetailerID ASC, RelationType ASC …

1
1日を通してランダムに統計が消える/空になる
SQL Server 2017(CU9)データベースを使用していますが、これは、インデックス統計に関連していると思われるパフォーマンス関連の問題をいくつか示しています。トラブルシューティング中に、統計が更新されていないことを発見しました(DBCC SHOW_STATISTICSがすべてのNULL値を返すことを意味します)。 影響を受けるテーブルでUPDATE STATISTICSを実行し、SHOW_STATISTICSが昨日の午後4時に実際の値を返すことを確認しました。今朝8:00 AMに統計は再び空になりました(NULL値を返します)。 クライアントには、毎日午前4:00に実行するようにスケジュールされたメンテナンスジョブがあり、データベースのインデックスを再作成してから、データベース全体に対してsp_updatestatsを実行します。統計が午前4時にプロファイラートレースで更新されることを確認しました。 なぜ統計が空になるのか途方に暮れていますが、それは4:00 AMに実行されているメンテナンスジョブですか?このバージョンのSQL Serverで気付いていないバグはありますか? よろしくお願いします。 より詳しい情報: 自動統計更新が有効になっています。 統計の自動更新を非同期で無効にします。 増分統計の自動作成が無効になっています。 スクリプトの再インデックス(難読化): USE DBNAME; DECLARE @CERTENG_Lock INT DECLARE @WebSite_Control_ProcessRunning_Lock INT DECLARE @WebSite_Control_Disabled_Lock INT DECLARE @LogMessage VARCHAR(1024) SELECT @CERTENG_Lock = Lock FROM application.CERTENG_Lock SELECT @WebSite_Control_Disabled_Lock = MAX(CAST(Disabled AS INT)), @WebSite_Control_ProcessRunning_Lock = MAX(CAST(ProcessRunning AS INT)) FROM application.WebSite_Control …

1
許可のスタックを拒否する
役割のためにdb_denycustomer、私がしたいだけで、顧客テーブルの列コードを選択し、他の人のどれもします。だから私はこれをしました: DENY SELECT ON dbo.customer TO db_denycustomer GRANT SELECT ON dbo.customer (code) TO db_denycustomer ...そしてそれはうまくいきます。涼しい!しかし、なぜですか? 私が関連記事で読んだのは、その許可スタックですが、DENY優先されます。対照的に、私の場合、最後の権限「クエリ」が優先されたようです。案の定、逆の順序で実行すると、後者DENYもコード列を非表示にします。 これについて詳しく説明してもらえますか? テストしたユーザーのデフォルトdb_datawriterとdb_datareaderロールも含めました。

1
システムヘルスに「sql_exit_invoked」がある場合、それはどういう意味ですか?
SQL Server 2016 Standardサーバーの1つに問題があります。私は8つの本番サーバーを使用していますが、ログにトレースが記録されずにランダムにクラッシュするのはこのサーバーだけです。 system_healthを有効にしています。「sql_exit_invoked」であるシステムヘルス魔女の行があることに気づきました。 その行の詳細情報を見つけようとしています。どういう意味ですか?インターネットで見つけた唯一の情報は、SQLExit()が呼び出されたときに発生し、SQL 2012以降にのみログに記録されるということです(msdn Webサイトで利用可能なリンク)。 だから私の質問は:これを私のログで見るのを心配するべきですか?これは問題のあるサーバーでのみ見つかり、他の7つのサーバーでは見つかりません。(それらはすべてSQL Server 2016 Standardエディションです) 誰かがこれについてもっと情報をくれますか?

1
SELECTクエリの算術オーバーフロー
単純なSELECTステートメントで算術オーバーフローが発生しました。クエリは以下のようになりました SELECT [SaleValue] FROM Sales [SaleValue]データ型decimal(9,0)であり、計算列ではありませんでした。 これが発生した理由は、このフィールドに指定されたデータ型よりも大きい値が格納されている行が列に含まれていたためdecimal(10,0)です。 列のサイズを大きくした場合にのみ、selectを機能させることができました。問題のテーブルには、他の2つの列と行に2つのインスタンスがあります。 この状況はどのようにして起こりましたか?そもそもどのように範囲外の値が列に保存されたのですか? 私はMicrosoft SQLサーバーを使用しています+これはベーステーブルであり、ビューではありません。

3
有限のコラボレーション距離で行に一意の値を割り当てるためのソリューション
次のコードを作成して入力できるテーブルがあります。 CREATE TABLE dbo.Example(GroupKey int NOT NULL, RecordKey varchar(12) NOT NULL); ALTER TABLE dbo.Example ADD CONSTRAINT iExample PRIMARY KEY CLUSTERED(GroupKey ASC, RecordKey ASC); INSERT INTO dbo.Example(GroupKey, RecordKey) VALUES (1, 'Archimedes'), (1, 'Newton'), (1, 'Euler'), (2, 'Euler'), (2, 'Gauss'), (3, 'Gauss'), (3, 'Poincaré'), (4, 'Ramanujan'), (5, 'Neumann'), (5, 'Grothendieck'), (6, 'Grothendieck'), …

1
インデックスシークオペレーターのコスト
以下のAdventureWorksサンプルデータベースクエリの場合: SELECT P.ProductID, CA.TransactionID FROM Production.Product AS P CROSS APPLY ( SELECT TOP (1) TH.TransactionID FROM Production.TransactionHistory AS TH WHERE TH.ProductID = P.ProductID ORDER BY TH.TransactionID DESC ) AS CA; 実行計画ショー推定オペレータコストの0.0850383ため(93%)インデックスシーク: コストは、使用中のカーディナリティ推定モデルとは無関係です。 Estimated CPU CostとEstimated I / O Costを単純に追加したものではありません。また、インデックスシークの 1回の実行のコストに推定実行回数を掛けたものでもありません。 このコスト数はどのようにして得られたのですか?

2
より良いストレージにアップグレードした後のチェックポイント中の待機の増加
古いオールフラッシュアレイから新しいオールフラッシュアレイ(異なるが、確立されたベンダー)に移行すると、チェックポイント中にSQL Sentryで待機が増えることがわかりました。 バージョン:SQL Server 2012 Sp4 私たちの古いストレージでは、待機時間はチェックポイント中の「スパイク」が2,500で約2kでしたが、新しいストレージではスパイクは通常10kで、ピークは50k近くです。歩哨は私たちをPAGEIOLATCHワティスにもっと向けます。独自の分析を行うと、PAGEIOLATCH and PAGELATCH待機の組み合わせのようです。Perfmonを使用すると、一般に、チェックポイントを行うページが増えるほど、待機時間が長くなりますが、フラッシュするのは、チェックポイント中に〜125 MBだけです。私たちのワークロードはほとんどが書き込みです(主に挿入/更新)。 ストレージベンダーは、ファイバーチャネル直接接続アレイがこれらのチェックポイントイベント中に1 ms未満応答していることを証明しています。HBAはアレイの番号も確認します。また、キューの深さが8を超えることはなかったため、HBAキューの問題であるとは考えていません。また、ZIO、実行スロットル、およびキューの深さの設定を無効にして、新しいHBAを試しました。また、サーバーのメモリを500 GBから1 TBに変更せずに増やしました。チェックポイントプロセス中に、2〜4個のコア(16個のうち)が100%に急上昇しますが、全体的なCPUは約20%です。BIOSも高パフォーマンスに設定されています。興味深いことに、CPUがC2スリープ状態になっているのは無効にしたにもかかわらず、通常はC2スリープ状態であるため、スリープ状態がC1を超えた理由を調査しています。 ほとんどすべての待機が、DCMページタイプのPFSが時々発生するデータページで発生していることがわかります。待機はtempdbではなくユーザーDBで行われます。また、待機が複数のデータページにわたって行われ、一部のSPIDが同じページで待機していることもわかります。データベースの設計には、いくつかの挿入ホットスポットがありますが、同じ設計が古いストレージに配置されていました。 このクエリのループを100回実行すると、ディスクとメモリで待機しているSPIDの数を把握できました。 SELECT [owt].[wait_type], count(*) as waitcount FROM sys.dm_os_waiting_tasks [owt] WHERE [owt].[wait_type] LIKE 'PAGE%' group by [owt].[wait_type] order by 1 GO 100 「良い」ことは、同じモデル配列と類似のサーバー仕様を持つパフォーマンス環境で問題を簡単に再現できることです。他にどこを見るべきか、どのように問題を絞り込むかについての考えをいただければ幸いです。現在、次のテストは次のとおりです。新しいマザーボードとより多くのCPUを搭載した新しいサーバー。SIOSデータキーパーを無効にする(これが古いストレージで行われている場合でも)。異なるHBAブランド。 exec sp_Blitz @outputtype = 'markdown' 優先度5:信頼性:-危険なサードパーティモジュール-Sophos Limited-ソフォスのバッファーオーバーラン保護-SOPHOS〜2.DLL-危険と思われるサードパーティモジュールがインストールされています。 優先度200:情報:-クラスターノード-これはクラスター内のノードです。-TraceFlag On-トレースフラグ1117がグローバルに有効になります。-トレースフラグ1118がグローバルに有効になります。-トレースフラグ3226がグローバルに有効になります。 優先度200:ライセンス:-使用中のEnterprise Edition機能* xxxxx-[xxxxxx]データベースは圧縮を使用しています。このデータベースをStandard Editionサーバーに復元すると、2016 …

3
MSDBを削除してもよろしいですか?
私はDBAではありません。MSDBが何をしているのかをググっただけです。基本的には、そのSQL Serverの職務と履歴のDBです。今、クラウドサーバーのスペースが足りなくなり、1年分のMSDBが2017年分あります。 、これを削除しても大丈夫ですか、それともバックアップのために保持しますか? 私のMSDBは250GB HDDで93GBです。

3
グループの列ごとに最後の非NULL値のセットを選択するにはどうすればよいですか?
SQL Server 2016を使用していますが、使用しているデータは次の形式です。 CREATE TABLE #tab (cat CHAR(1), t CHAR(2), val1 INT, val2 CHAR(1)); INSERT INTO #tab VALUES ('A','Q1',2,NULL),('A','Q2',NULL,'P'),('A','Q3',1,NULL),('A','Q3',NULL,NULL), ('B','Q1',5,NULL),('B','Q2',NULL,'P'),('B','Q3',NULL,'C'),('B','Q3',10,NULL); SELECT * FROM #tab; 列の最後のnull以外の値を取得し、val1でval2グループ化catおよび順序付けしたいのtですが。私が求めている結果は cat val1 val2 A 1 P B 10 C 私が来た最も近いものは、順序付けられた最後の非null値が必要なので、機能しないものLAST_VALUEを無視しながら使用してORDER BYいます。 SELECT DISTINCT cat, LAST_VALUE(val1) OVER(PARTITION BY cat ORDER BY (SELECT NULL) ) AS val1, …

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