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

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


1
新しい仕事のDBA初日-バックアップとセキュリティを確認する-方法 他に何をチェックする必要がありますか?
一般に、新しい環境で開始するとき、バックアップの場所、最後のフルバックアップが行われた時刻、最後の復元が適用された時刻、およびセキュリティも確認します。 これを行うには、T-SQLを使用します。 バックアップを確認する ;with Radhe as ( SELECT @@Servername as [Server_Name], B.name as Database_Name, ISNULL(STR(ABS(DATEDIFF(day, GetDate(), MAX(Backup_finish_date)))), 'NEVER') as DaysSinceLastBackup, ISNULL(Convert(char(11), MAX(backup_finish_date), 113)+ ' ' + CONVERT(VARCHAR(8),MAX(backup_finish_date),108), 'NEVER') as LastBackupDate ,BackupSize_GB=CAST(COALESCE(MAX(A.BACKUP_SIZE),0)/1024.00/1024.00/1024.00 AS NUMERIC(18,2)) ,BackupSize_MB=CAST(COALESCE(MAX(A.BACKUP_SIZE),0)/1024.00/1024.00 AS NUMERIC(18,2)) ,media_set_id = MAX(A.media_set_id) ,[AVG Backup Duration]= AVG(CAST(DATEDIFF(s, A.backup_start_date, A.backup_finish_date) AS int)) ,[Longest Backup Duration]= …

1
XMLインデックスを使用した非常に奇妙なパフォーマンス
私の質問はこれに基づいています:https : //stackoverflow.com/q/35575990/5089204 そこで答えを出すために、次のテストシナリオを行いました。 テストシナリオ 最初にテストテーブルを作成し、100.000行を入力します。乱数(0から1000)は、乱数ごとに最大100行になるはずです。この番号はvarchar colに入れられ、XMLの値として使用されます。 次に、OPのような呼び出しを行います。.exist()および.nodes()を使用して、2番目の利点はわずかですが、両方とも5〜6秒かかります。実際に、呼び出しを2回行います。2回目はスワップされた順序で、検索パラメーターをわずかに変更し、フルパスではなく「// item」を使用して、キャッシュされた結果またはプランによる誤検知を回避します。 次に、XMLインデックスを作成し、同じ呼び出しを行います 今-本当に驚いたことは何ですか!- .nodesとの完全なパスがはるかに遅い(9秒)前よりもなく.exist()して、半秒までであるフルパスもダウン約0.10秒です。(一方.nodes()、短いパスの方が優れていますが、それでもはるかに遅れています.exist()) 質問: 私自身のテストをまとめると、XMLインデックスはデータベースを極端に破壊する可能性があります。それらは物事を非常に高速化できますが(s。edit 2)、クエリも遅くなります。それらがどのように機能するかを理解したいのですが... XMLインデックスを作成する必要があるのはいつですか?.nodes()インデックスを使用すると、インデックスを使用しない場合よりも悪くなるのはなぜですか?否定的な影響をどのように回避できますか? CREATE TABLE #testTbl(ID INT IDENTITY PRIMARY KEY, SomeData VARCHAR(100),XmlColumn XML); GO DECLARE @RndNumber VARCHAR(100)=(SELECT CAST(CAST(RAND()*1000 AS INT) AS VARCHAR(100))); INSERT INTO #testTbl VALUES('Data_' + @RndNumber, '<error application="application" host="host" type="exception" message="message" > <serverVariables> <item name="name1"> …

1
SQL Serverでデータベースをアタッチするにはどうすればよいですか?
SQL Serverでのデータベースの接続に関する一般的な質問: データベースをアタッチまたはデタッチするとはどういう意味ですか? データベースをデタッチするにはどうすればよいですか? データベースを接続するにはどうすればよいですか? ログを添付して再構築するとはどういう意味ですか? SQL Server Expressでどのように行うのですか? いつデタッチとアタッチを検討できますか? リスクや警告はありますか? SQL Serverのバージョンとエディションの間の接続はどうですか?(StandardからEnterprise?2000から2008?2012から2008?)
32 sql-server 

3
インスタンスごとにSQL Server ExpressのメモリとCPUの制限はありますか?
サーバーに8GBのRAMがあり、SQL Server Expressの4つのインスタンスを実行する場合、SQL Serverが使用する合計メモリ制限は1GBですか、4GBですか? このように複数のインスタンスを実行して、各データベースがリソースをより有効に使用できるようにすることをお勧めしますか(サーバーに十分なリソースがある場合)。

2
どちらがより効率的ですか:リンクサーバーから選択するか、リンクサーバーに挿入しますか?
あるサーバーから別のサーバーに(リンクサーバー経由で)データをエクスポートする必要があるとします。どのステートメントがより効率的ですか? ソースサーバーでの実行: INSERT INTO [DestinationLinkedServer].[DestinationDB].[dbo].[Table] SELECT a, b, c, ... FROM [dbo].Udf_GetExportData() または、ターゲットサーバーで実行します。 INSERT INTO [dbo].[Table] SELECT a, b, c, ... FROM OPENQUERY([OriginLinkedServer], 'SELECT a, b, c, ... FROM [OriginDB].[dbo].Udf_GetExportData()') どちらがより速く、合計でより少ないリソースを消費しますか(ソースサーバーとターゲットサーバーの両方)。両方のサーバーはSQL Server 2005です。

2
学習のためのデータベースチューニングの演習はどこにありますか?
開発者として、多くの場合、DBAはデータベースレベルでパフォーマンスの問題を解決する責任を負うため、クエリの診断、調整、リファクタリングなどの経験はあまりありません。 私は、テーブル、データ、クエリ、トリガー、SPなどが大量にあるデータベースを探しています。このデータベースには、意図的なパフォーマンスの問題があります。理想的には、これはMS SQLサーバー上にあります。 誰でもこの種のことを知っていますか?


5
SQL Serverでデッドロックなしでキーテーブルへの同時アクセスを処理する
IDENTITY他のさまざまなテーブルのフィールドの代わりとしてレガシーアプリケーションで使用されるテーブルがあります。 テーブルの各行にはLastID、で名前が付けられたフィールドで最後に使用されたIDが格納されIDNameます。 ストアドプロシージャがデッドロックを取得することがあります-適切なエラーハンドラを作成したと思います。しかし、この方法論が思うように機能するかどうか、またはここで間違ったツリーを探しているかどうかに興味があります。 デッドロックがまったくない状態でこのテーブルにアクセスする方法があるはずです。 データベース自体はで構成されREAD_COMMITTED_SNAPSHOT = 1ます。 まず、表を次に示します。 CREATE TABLE [dbo].[tblIDs]( [IDListID] [int] NOT NULL CONSTRAINT PK_tblIDs PRIMARY KEY CLUSTERED IDENTITY(1,1) , [IDName] [nvarchar](255) NULL, [LastID] [int] NULL, ); そして、IDNameフィールドの非クラスター化インデックス: CREATE NONCLUSTERED INDEX [IX_tblIDs_IDName] ON [dbo].[tblIDs] ( [IDName] ASC ) WITH ( PAD_INDEX = OFF , STATISTICS_NORECOMPUTE = OFF , …

3
変数をインライン化するときにSQL Serverがより良い実行計画を使用するのはなぜですか?
最適化しようとしているSQLクエリがあります。 DECLARE @Id UNIQUEIDENTIFIER = 'cec094e5-b312-4b13-997a-c91a8c662962' SELECT Id, MIN(SomeTimestamp), MAX(SomeInt) FROM dbo.MyTable WHERE Id = @Id AND SomeBit = 1 GROUP BY Id MyTable 次の2つのインデックスがあります。 CREATE NONCLUSTERED INDEX IX_MyTable_SomeTimestamp_Includes ON dbo.MyTable (SomeTimestamp ASC) INCLUDE(Id, SomeInt) CREATE NONCLUSTERED INDEX IX_MyTable_Id_SomeBit_Includes ON dbo.MyTable (Id, SomeBit) INCLUDE (TotallyUnrelatedTimestamp) 上記のとおりにクエリを実行すると、SQL Serverは最初のインデックスをスキャンします。その結果、189,703の論理読み取りと2〜3秒の時間がかかります。 @Id変数をインライン化してクエリを再度実行すると、SQL Serverは2番目のインデックスを検索します。その結果、論理読み取りは104回だけで、期間は0.001秒(基本的に瞬時)になります。 変数が必要ですが、SQLで適切なプランを使用する必要があります。一時的な解決策として、クエリにインデックスヒントを付けましたが、クエリは基本的に瞬時です。ただし、可能な場合はインデックスヒントから離れるようにします。私は通常、クエリオプティマイザーがその仕事をすることができない場合、何をすべきかを明示的に伝えることなくそれを支援するためにできること(またはやめること)があると思います。 …

6
SqlClientをデフォルトでARITHABORT ONにする
まず最初に:互換性レベル80のデータベースでMS SQL Server 2008を使用し、.Netで接続していSystem.Data.SqlClient.SqlConnectionます。 パフォーマンス上の理由から、インデックス付きビューを作成しました。そのため、ビューで参照されるテーブルの更新はで行う必要がありますARITHABORT ON。ただし、プロファイラーはSqlClientがに接続していることを示しているARITHABORT OFFため、これらのテーブルの更新は失敗しています。 SqlClientを使用するための中央構成設定はありますARITHABORT ONか?私が見つけることができた最善の方法は、接続が開かれるたびに手動で実行することですが、これを行うために既存のコードベースを更新することはかなり大きなタスクになるので、より良い方法を見つけたいです。


1
ステートメントの実行速度がネットワーク接続に依存するのはなぜですか?
T-SQLの実行速度は、サーバーに対するネットワーク接続の待機時間に依存しているようです。SQL Serverがクライアントにレポートするものがない場合、実行されるまで実行されますが、テストでは別の話が示されます。 create procedure UselessLoop @I int as declare @D datetime = getdate() while @I > 0 set @I -= 1 print datediff(millisecond, @D, getdate()) exec UselessLoop 100000 Server Milliseconds local 53 nearby 63 faraway 660 exec UselessLoop 1000000 Server Milliseconds local 546 nearby 640 faraway 6183 テストは、SSMSを使用して異なるコンピューターから同じサーバーに対して実行されます。ローカルはサーバーから実行され、近くは同じローカルネットワーク上にあり、遠くは1ギガビットファイバーで接続された500 km離れた別のオフィスから実行されます。 実行されるステートメントの数に直接依存する、SQL …
31 sql-server  t-sql 

8
不明なソースからバックアップを復元することのセキュリティへの影響
シナリオ:データベースのバックアップを渡され、サーバー(他のデータベースを既にホストしている)に復元するように指示されましたが、バックアップの内容やソースを信頼する必要があるかどうかに関する有用な情報は提供されません。 質問1:悪意のある可能性のあるバックアップの復元の潜在的な影響は何ですか? 質問2:悪意のある可能性のあるバックアップの復元の影響から、サーバー/他のデータベースのデータを保護するために何ができますか?RESTORE VERIFYONLY良い最初のステップのようです。最終的な答えは、おそらく「外の世界へのアクセスのないサンドボックスVMにデータベースを復元する」でしょうが、そのオプションはテーブルから外れていると仮定しましょう。この状況で他に何をすべきですか?

2
SQL Server 2012で空の結果セットでクエリエラーが発生するのはなぜですか?
MS SQL Server 2012で次のクエリを実行すると、2番目のクエリは失敗しますが、最初のクエリは失敗しません。また、where句なしで実行すると、両方のクエリが失敗します。両方が空の結果セットを持つ必要があるため、どちらが失敗するのか、私は途方に暮れています。どんな助け/洞察も大歓迎です。 create table #temp (id int primary key) create table #temp2 (id int) select 1/0 from #temp where id = 1 select 1/0 from #temp2 where id = 1

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