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

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

1
SQL Server DBAとして、メルトダウン/スペクトルの脆弱性について知っておくべきことは何ですか?
この質問の答えはコミュニティの努力です。この投稿を改善するには、既存の回答を編集してください。現在、新しい回答やインタラクションを受け入れていません。 聞いていない場合、最近10年間に販売された実質的にすべてのプロセッサに影響を与える一連の関連する脆弱性が最近発見されました。InfoSec.SEでメルトダウン/スペクトルの脆弱性に関する技術的な詳細を確認できます。 SQL Server DBAとして、これについて何を理解する必要がありますか? SQL Server(またはvmファーム)を他の企業と共有しない場合、これはまだリスクですか? これは単なるOSパッチですか?または、この脆弱性に対処するために必要なSQL Server用のパッチ/ホットフィックスはありますか?どのSQL Serverバージョンにパッチが適用されますか? 一部の記事は、特に高度に仮想化された環境で、5〜30%のパフォーマンスへの影響を予測しています。SQL Serverのパフォーマンスへの影響を予測する方法はありますか?

2
SQL Server 2016と2012の挿入パフォーマンス
同じサーバーに2つのSQL Serverインスタンスがあります。 Microsoft SQL Server 2012(SP1)-11.0.3000.0(X64)Standard Edition(64ビット) Microsoft SQL Server 2016(SP1-CU5)(KB4040714)-13.0.4451.0(X64)Enterprise Edition(64ビット) sp_configureの結果は、両方のインスタンスで同じです(新しい2016オプションを除く)。 同じディスクフォルダーの両方のインスタンスに新しいデータベースを作成しました。自動成長パラメータは同じです。 統計の自動作成および自動更新オプションはオフになっています。 次に、10000の挿入をヒープにテストしました。 set nocount on go create table dbo.TestInsert ( i int not null, s varchar(50) not null ) declare @d1 datetime, @d2 datetime, @i int set @d1 = getdate() set @i = 1 while @i …

4
TSQLがPOWER(2.、64。)に対して間違った値を返すのはなぜですか?
select POWER(2.,64.)の18446744073709552000代わりに戻ります18446744073709551616。精度は16桁しかないようです(17桁を丸めます)。 精度を明示的にしselect power(cast(2 as numeric(38,0)),cast(64 as numeric(38,0)))ても、丸められた結果が返されます。 これは、このように16桁の精度で任意にフレークアウトするための非常に基本的な操作のようです。それが正しく計算できる最高はPOWER(2.,56.)、失敗しただけですPOWER(2.,57.)。ここで何が起こっていますか? 本当にひどいのは、select 2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.;実際に正しい値を返すということです。簡潔さのために。

1
一意のインデックスの更新と統計行の変更カウンター
次の表、一意のクラスター化インデックス、および統計情報が与えられます。 CREATE TABLE dbo.Banana ( pk integer NOT NULL, c1 char(1) NOT NULL, c2 char(1) NOT NULL ); CREATE UNIQUE CLUSTERED INDEX pk ON dbo.Banana (pk); CREATE STATISTICS c1 ON dbo.Banana (c1); CREATE STATISTICS c2 ON dbo.Banana (c2); INSERT dbo.Banana (pk, c1, c2) VALUES (1, 'A', 'W'), (2, 'B', 'X'), …

2
FILESTREAMインサイダー情報の検索
FILESTREAM機能がMicrosoft SQL Server 2012でアクティブになると、SQL Serverはシステム上に「隠された」共有を作成します。共有は次のように定義されます。 Sharename FILESTREAM_SHARE Path \\?\GLOBALROOT\Device\RsFx0320\<localmachine>\FILESTREAM_SHARE Remark SQL Server FILESTREAM share Maximum users unlimited Users Caching Manual caching of documents Permissions NT-AUTHORITY\Authenticated Users, FULL 名前は、SQL Server構成マネージャーで FILESTREAMを最初に構成するときに指定する共有の名前です。しかし、それは何のためですか? これまでのところ 私はすべての利用可能なFILESTREAMドキュメントを以下から読みます。 FILESTREAM(SQLサーバー) FILESTREAMを有効にして構成する FILESTREAM対応データベースを作成する FILESTREAMデータを保存するためのテーブルを作成する ...および関連するすべて FILESTREAMと他のSQL Server機能との互換性 FILESTREAM DDL、関数、ストアドプロシージャ、およびビュー OpenSqlFilestreamを使用してFILESTREAMデータにアクセスする 紙SQL Server 2008の- SQL Server 2008のFILESTREAMストレージ 記事FILESTREAM(OLTP)---他の多くの資料を参照するミッションクリティカルなOLTPソリューションを設計するためのテクニカルリファレンスガイド ...しかし、その共有とその目的、またはその目的についての言及はありませんでした。名前を入力すると、SQL …

3
SQL Serverカーディナリティヒント
カーディナリティの推定値をSQL Serverオプティマイザー(任意のバージョン)に「注入」する方法はありますか? すなわち、Oracleのカーディナリティのヒントに似たものです。 私のモチベーションは、クエリオプティマイザーは本当にどれくらい良いのかという記事に基づいています。[1]、彼らは悪い計画の選択に対するカーディナリティ推定量の影響をテストします。したがって、複雑なクエリに対して正確にカーディナリティを「推定」するようにSQL Serverに強制できれば十分です。 [1] Leis、Viktor、et al。「クエリオプティマイザーはどれほど優れていますか?」 VLDB Endowment 9.3(2015):204-215の議事録。

1
INSERTでWITH TABLOCKを使用する利点
状況INSERT INTO <tablename> (WITH TABLOCK)によっては、ロギングが最小限であるため、実行が高速になります。これらの状況には、BULK_LOGGED復旧モデルにデータベースを含めることが含まれます。 データベース(tempdb)が復旧モデルを使用しているときに、空のテーブルで使用することWITH TABLOCKでパフォーマンス上の利点は他INSERTにありますか?SIMPLE SQL Server 2012 Standard Editionを使用しています。 私のユースケースは、を使用してストアドプロシージャ内に一時テーブルを作成し、すぐにデータを取り込むINSERT...SELECTことです。私はそのようなtempdbの乱用を避けようとしますが、時々必要になります。 私は必要なケースを構築しようとしていますTABLOCK。それは何も傷つけないようで、利益があるかもしれません。コードベースのどこにでもそれを追加するのに十分な潜在的な利点があるかどうかを把握しようとしています。テーブルに書き込みたい他のプロセスがないと確信しています。 通常、クラスター化されたPKで新しく作成されたローカル一時テーブルに挿入しますが、時々ヒープを使用します。

4
NVARCHAR列の値が実際にUnicodeであるかどうかを検出します
いくつかのSQL Serverデータベースを継承しました。ETLを取得するSQL Server 2014 Standardのソースデータベース(「Q」と呼びます)から約8670万行、41列の幅を持つ1つのテーブル(「G」と呼びます)がありますSQL Server 2008 R2 Standardで同じテーブル名を持つターゲットデータベース(「P」と呼びます)。 すなわち[Q]。[G] ---> [P]。[G] 編集:2017年3月20日:一部の人々は、ソーステーブルがターゲットテーブルの唯一のソースであるかどうかを尋ねました。はい、それが唯一のソースです。ETLに関する限り、実際の変換は行われていません。事実上、ソースデータの1:1コピーであることが意図されています。したがって、このターゲットテーブルに追加のソースを追加する予定はありません。 [Q]。[G]の列の半分強はVARCHAR(ソーステーブル)です。 13列はVARCHAR(80)です 9列はVARCHAR(30)です 2列はVARCHAR(8)です。 同様に、[P]。[G]の同じ列はNVARCHAR(ターゲットテーブル)で、同じ幅の同じ列数を持ちます。(つまり、同じ長さですが、NVARCHAR)。 13列はNVARCHAR(80)です 9列はNVARCHAR(30)です 2列はNVARCHAR(8)です。 これは私の設計ではありません。 ALTER [P]。[G](ターゲット)列のデータ型をNVARCHARからVARCHARに変更したい。安全に(変換によるデータ損失なしで)したいです。 ターゲット表の各NVARCHAR列のデータ値を見て、列に実際にUnicodeデータが含まれているかどうかを確認するにはどうすればよいですか? 各NVARCHAR列の各値を(ループで?)チェックし、値のいずれかが本物のUnicodeであるかどうかを確認できるクエリ(DMV?)は理想的なソリューションですが、他の方法も歓迎します。

4
クエリを変更してオペレーターの見積もりを改善する
許容時間内に実行されるクエリがありますが、そこから可能な限り最高のパフォーマンスを絞り出したいです。 私が改善しようとしている操作は、ノード17からのプランの右側にある「インデックスシーク」です。 適切なインデックスを追加しましたが、その操作に対して得られる推定値は、想定される値の半分です。 インデックスを変更し、一時テーブルを追加してクエリを書き直すことを探しましたが、適切な見積もりを得るためにこれ以上単純化することはできませんでした。 他に私が試すことができるものについて誰か提案がありますか? 完全な計画とその詳細については、こちらをご覧ください。 匿名化されていないプランはここにあります。 更新: 質問の最初のバージョンは多くの混乱を引き起こしたと感じているので、いくつかの説明とともに元のコードを追加します。 create procedure [dbo].[someProcedure] @asType int, @customAttrValIds idlist readonly as begin set nocount on; declare @dist_ca_id int; select * into #temp from @customAttrValIds where id is not null; select @dist_ca_id = count(distinct CustomAttrID) from CustomAttributeValues c inner join #temp a on c.Id …



2
ヒープの圧縮
以下は、Microsoft Docsの段落です。 DML操作の一部としてヒープに割り当てられた新しいページは、ヒープが再構築されるまでPAGE圧縮を使用しません。圧縮を削除して再適用するか、クラスター化インデックスを作成および削除して、ヒープを再構築します。 なぜそうなのか分かりません。圧縮設定が指定されたヒープがある場合、テーブルに属するページに適用されないのはなぜですか? ありがとう

2
1秒未満で発生するブロッキングを追跡する方法-SQL Server
1秒未満で発生するブロッキングの問題をトラブルシューティングしようとしています。OLTPアプリケーションは非常に機密性が高く、合意されたSLAに従って一部のトランザクションの応答時間が200ミリ秒未満である必要があります。新しいコードリリースにはロックエスカレーションの問題がいくつかあり、更新プログラムのバッチサイズを小さくすることで解決できました。バッチサイズが小さい場合でも、新しいspがOLTPトランザクションが更新しているのと同じ行をブロックしていると思われます。 ブロックされているセッションと待機しているリソースを見つける必要があります。私の理解では、「ブロックされたプロセスのしきい値」は最低1秒に設定できるため、ブロックはキャプチャされません。 wait_infoイベントとwait_completed xイベントを試しています。 これを追跡できる他の方法はありますか。ありがとう

2
SqlCommand.Prepare()を使用する意味と利点は何ですか?
SQLクエリの実行前にSqlCommand.Prepare()(MSDNを参照)メソッドが広く使用されている開発者コードに出会いました。そして、これの利点は何でしょうか? サンプル: command.Prepare(); command.ExecuteNonQuery(); //... command.Parameters[0].Value = 20; command.ExecuteNonQuery(); 私は少し遊んでトレースしました。Prepare()メソッドを呼び出した後にコマンドを実行すると、SQL Serverで次のステートメントが実行されます。 declare @p1 int set @p1=1 exec sp_prepexec @p1 output,N'@id int,@desc text',N'INSERT INTO dbo.testtable (id) VALUES (@id)',@id=20' select @p1 その後、パラメータが値を取得してSqlCommand.ExecuteNonQuery()呼び出されると、次がSql-Serverで実行されます。 exec sp_execute 1,@id=20 私には、これはステートメントがPrepare()実行されるとすぐにコンパイルされるように見えます。これの利点は何でしょうか?これは、それがプランキャッシュに入れられ、目的のパラメーター値で最終クエリが実行されるとすぐに再利用できることを意味しますか? SqlParametersで実行されるSqlCommandsは、常にプロシージャコールでラップされることがわかりました(別の質問で説明しました)sp_executesql。これにより、SQL Serverは、パラメーター値に依存しないプランを保存および再利用できます。 これに関してprepare()は、メソッドが役に立たないのか、時代遅れののか、ここで何かが足りないのでしょうか?

1
TempDBの競合
SQL Server 2014 SP1にアクティブなOLTP 40GBデータベースがあります。IO_Completionの待機、ディスクキューの長さが900に上昇し、SQL Serverが応答を停止すると、クエリが遅くなることがわかりました。私たちが試したもの: インスタンスを再起動すると、すぐに同じように動作し始めます。 2回目の再起動後、各tempdbデータファイルの初期サイズを変更し(16個のデータファイルが作成されます)、正常に動作し始めました。 注:中間結果セットにはテーブル変数を使用しています。これらの結果セットは非常に小さいです。 それは月に2回起こりました。データファイルに手動で少しのスペースを追加するたびに、正常に動作し始めます。さらに興味深いのは、SQL Server 2008 R2とSQL Server 2012で同じセットアップ(同じハードウェア、同じフォルダーとファイルのセットアップ、同じワークロード)が正常に機能していることです。 恒久的な解決策を見つける手助けをしてください。 すべてのデータファイルの初期サイズは同じ1000MB、現在はそれぞれ1500MBです。すべて同じです。自動拡張はそれぞれ100MBです。これまでは、PFSおよびGAMページの競合に直面していましたが、16まで増加し、問題は解決しました。トレースフラグ1117と1118の両方が有効になっています。2つのNUMAノード上の24コア。すべてのデータファイルは同じボリューム上にあります。シンプルディスク、SANなし。 インスタンスは物理マシン上にあります。テーブル変数を使用したクエリとハッシュ結合を使用したクエリは、最も一般的にIO_Completion待機を生成します。 wBobによる詳細な回答により、さらに詳細に検索するようになりました。以前どのようにそれを見逃しましたか: データベース「tempdb」のファイル「templog」の自動拡張がユーザーによってキャンセルされたか、7704ミリ秒後にタイムアウトしました。ALTER DATABASEを使用して、このファイルのFILEGROWTH値を小さく設定するか、新しいファイルサイズを明示的に設定します。 これは、この種の問題が発生したときにログに記録されたものです。TempDBを別の高速ドライブに移動しています。

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