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

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

2
SQL Server 2016 Enterpriseのパフォーマンスが低い
長くなって申し訳ありませんが、分析に役立つように、できるだけ多くの情報を提供したいと思います。 同様の問題のある投稿がいくつかあることは知っていますが、これらのさまざまな投稿やWebで入手可能なその他の情報を既にフォローしていますが、問題は解決しません。 SQL Serverのパフォーマンスに深刻な問題があり、ユーザーを狂わせています。この問題は数年間続き、2016年末までは別のエンティティによって管理され、2017年以降は私が管理するようになりました。 2017年の半ばに、Microsoft SQL Server 2012パフォーマンスダッシュボードレポートに示されているインデックス付けのヒントに従って問題を解決することができました。効果はすぐに現れ、魔法のように聞こえました。最後の数日はほとんど常に100%だったプロセッサーが非常に穏やかになり、ユーザーのフィードバックが鳴り響きました。通常、特定のリストを取得するのに20分かかり、最終的に数秒で完了できるため、ERP技術者でさえ喜んでいました。 しかし、時間の経過とともに、それは徐々に悪化し始めました。インデックスが多すぎるとパフォーマンスが低下するのではないかと心配して、インデックスの作成を避けました。しかし、ある時点で、不要なものを削除して、Performance Dashboardが提案する新しいものを作成する必要がありました。しかし、影響はありません。 ERPでの保存とコンサルティングの際に感じられる遅さは本質的にです。 次の構成のSQL Server 2016 Enterprise(64ビット)専用のWindows Server 2012 R2があります。 CPU:Intel Xeon CPU E5-2650 v3 @ 2.30GHz メモリ:84 GB ストレージに関して、サーバーにはオペレーティングシステム専用のボリューム、データ専用のログ、およびログ専用のボリュームがあります。 17データベース ユーザー: 最大のDBでは、ほぼ113人のユーザーが同時に接続されています 他には約9人のユーザーがいます それらの2つで3 + 3 残りのユーザーはそれぞれ1人だけです 大規模なデータベース用にも作成するWebがありますが、使用頻度ははるかに低く、約20人のユーザーがいるはずです。 DBのサイズ: 最大のデータベースは290 GBです。 2番目に大きいものは100 GB 3番目に大きいものは20 GB 4番目の14 GB 残りはそれぞれ3 GBを少し超えています これは本番環境のインスタンスですが、ほとんどの場合私がそこに接続しているだけなので、この目的のために無視できると思われる開発のインスタンスもありますが、この問題は、接続していない場合でも常に発生します。 プロセッサはほとんどの場合、次のようになります。 …

2
ファイルが関連付けられていないファイルグループは削除できません
SQL Server 2017 CU3で奇妙なエラーメッセージが発生します。データベースを移行し、ファイルグループを再編成しています。「再編成」とは、オブジェクトの新しいファイルグループにパーティション関数とパーティション構成を作成し、パーティション分割中にインデックスを再構築してからパーティション分割を削除するストアドプロシージャを使用することを意味します。 最後に、いくつかの空のファイルグループを取得しました。それらのファイルは削除されます。また、ファイルグループ自体も削除されます。これはほとんどの場合うまくいきます。ただし、2つのデータベースの場合、ファイルを削除しました... 関連付けられているファイルがないままファイルグループが残っていますが ALTER DATABASE REMOVE FILEGROUP エラー5042をスローします。 ファイルグループ 'xyz'は空ではないため削除できません。 質問 空のファイルグループを削除するにはどうすればよいですか? 私はすでにいくつかの一般的な問題を読みましたが、それらは私のシステムにはありません: チェック済み: SELECT * FROM sys.partition_schemes; SELECT * FROM sys.partition_functions; 0行...データベースにパーティションオブジェクトが残っていません UPDATE STATISTICS データベース内のすべてのオブジェクト 無効 ファイルグループのインデックスをチェックします。 SELECT * FROM sys.data_spaces ds INNER JOIN sys.indexes i ON ds.data_space_id = i.data_space_id WHERE ds.name = 'xyz' 0行 ファイルグループ内のオブジェクトを確認します。 …

1
SQL ServerはNULLを固定長の列に格納できませんか?
オラクルの公式ドキュメントでこの声明に出くわしました。 Microsoft SQL Serverでは、可変長データ型の列のみがNULL値を格納できます。固定長データ型でNULLを許可する列を作成すると、列は自動的にシステムの可変長データ型に変換されます... SQL Serverのドキュメントでこれについて読んだことも、そのようなことを経験したこともありません。逆に、SQL Serverでは、固定長のデータ型(intやfloatなど、charも)が頻繁に使用され、NULL可能でも非常に効率的に格納されます。 このオラクル声明の背後にある理論的根拠はありますか?!

1
HEAPを再構築するとダウンタイムが発生しますか?
これは少し恥ずかしい質問です。長年これを見逃していたとは思えません。 401ヒープテーブルを持つベンダーサードパーティデータベースがあります。私は最近、Brent Ozarのスクリプトとセットアップsp_BlitzFirstを使用して15分ごとに実行し、待機統計などを収集しました。 明らかになったのは、24時間にわたって実行されるたびにForwarded Recordsを修正するように指示することでした。DMV全体でクエリを実行し、150,000を超える転送されたレコード値を持ついくつかのテーブルを取得した読者に、おそらく何がショックになるでしょう。 これを修正することは、テーブル全体にクラスター化インデックスを作成すること、または実行するための一時的な回避策として理解していますALTER TABLE [tablename] REBUILD。 しかし、私が見つけられなかったのは、これがテーブルをオフラインにするかどうか、およびこのコマンドを実行する前に知っておくべき他の問題があるかどうかです。 2008 R2のEnterprise Editionを使用していますが、この方法で実行すると停止の必要がなくなるのでしょうか。 ALTER TABLE [tablename] REBUILD WITH (ONLINE = ON); 誰かこれについて何か経験がありますか?

1
FILESTREAMファイルグループを使用したSQLサーバーデータベースのバックアップと復元
私はSQL Serverを使用しており、2つのファイルグループを持つ巨大なデータベースがあります。 プライマリ:大きなファイル(1MB +)を除くすべてのデータが含まれます FILESTREAM(読み取り/書き込み):大きなファイルが含まれています 現在、バックアップシナリオは次のとおりです。 毎週金曜日に完全バックアップ(午前2時)を取得します 金曜日を除く毎日、差分バックアップ(午前2時)を取得します。 データベースが大きく、リモートサーバーで運用されているため、データベースをローカル環境に移動してテストデータベースを(毎週)作成する場合は常に、プライマリとファイルストリームの両方を使用する必要があります。 ファイルストリームを無視して、プライマリファイルグループを取得するだけで済むように、バックアップと復元の方法を変更できるようにしたいと考えています。このようにして、毎週、ファイルストリームを想定するすべての情報ではなく、プライマリファイルグループのみを取得します。 多くの問題があり、ファイルにアクセスするとすべてのファイルストリーム参照が失われる可能性があると思います。バックアップを実行するときにすべてのファイルストリーム列のコンテンツを変更できるか、またはテスト環境でホストされている別のファイルストリームを使用できるかどうか知りたいのですが。また、一部のファイルグループのみの段階的復元について聞いたことがありますが、その実行方法には多くの疑問があります。 質問1:このシナリオはありますか? 質問2:完全バックアップを1つだけにし、差分バックアップ/トランザクションログをテスト環境に持ってくるのは良い考えですか? 質問3:バックアップと復元のシナリオを改善できますか? 私はすべての推奨事項に耳を傾けています。ケースの例がある場合は、T-SQLクエリを表示してください。

1
重複なしでテーブルから返された重複レコード
私のシステムで作業を分散するために使用されるビジーキューテーブルをクエリするストアドプロシージャがあります。問題のテーブルにはWorkIDの主キーがあり、重複はありません。 クエリの簡略版は次のとおりです。 INSERT INTO #TempWorkIDs (WorkID) SELECT W.WorkID FROM dbo.WorkTable W WHERE (@bool_param = 0 AND ((W.InProgress = 0 AND ISNULL(W.UserID, -1) != @userid_param AND (@bool_filtered = 0 OR W.TypeID IN (SELECT TypeID FROM #Types AS t))) OR (@bool_param = 1 AND W.InProgress = 1 AND W.UserID != @userid_param) OR …

2
本番環境のテーブルから列を削除する
2つのテーブル間の関係をm:1からm:nに変更する必要がある状況があります。 したがって、これら2つのテーブルの間に相互参照テーブルを作成する必要があります。 すべての既存のデータを「子」テーブルから相互参照テーブルに移行した後、子テーブルの元の外部キー列を削除することは悪い考えでしょうか? そこに置いておくと、基本的に技術的な負債があります。しかし、私はdbaではなく、テーブルから列を削除することの意味をよく理解していません。(私はそれが可能であることを知っていますが、それは悪い考えですか?私のデータベースはそれを嫌いますか?) ありがとう

5
Intellisense SSMS 2017のオートコンプリート。どこに行きますか?
最近、新しい開発ボックスを入手し、Visual Studioをインストールしました。SSMSをインストールしました。いくつかのプロシージャとテーブルの作成を開始しました...インテリセンスのヘルプはありません。 なぁ? すべてのボックスがチェックされています。私は正しいDBにいます。テーブルが存在しない場合、赤い波線が表示されますが、オブジェクト名を補完するためのフライアウトはありません。私のグーグルで2017のインテリセンス機能が大幅に改善されたことがわかるので、間違いなく私は何かを台無しにしました。 2018年11月6日更新 オートコンプリートを許可するものと許可しないものについてはまだ非常に不安定であるように思われるため、キャッシングが犯人であると言って自分の回答を削除しました。以前のバージョンのSMSSに戻って、このバージョンまで慣れ親しんだような結果を得ることができます。 私は、Azure Data Studioを日常的なものに使い始めました。それは超すごいです。QoLの多くの改善。サーバー管理のための十分な機能にさえ近づいていませんが、一般的なproc書き込みとデータ分析にははるかに優れています。

1
最大サーバーメモリの変更は、プランキャッシュをクリアし、(明らかに)メモリ設定を変更する以外に何をしますか?)
32 GBのRAMと4つのコア、60〜80の同時接続でSQL Server 2012 SP3を実行し、主にアドホックなワークロードで、SQL Serverプロセス(CPU)が急上昇し、予測できない時間に1日に1回または2回急上昇し続けています。スパイクの根本的な原因の特定に取り組んでいます。それまでの間、最大メモリ設定の変更(アップまたはダウン)が、CPUの負荷を通常に戻す唯一の方法であることがわかりました。 ログを確認し、StackExchange(https://dba.stackexchange.com/a/183276)を検索すると、最大メモリ設定を変更することにより、プランキャッシュがフラッシュされていることがわかります。ただし、DBCC FREESYSTEMCACHE( 'SQL Plans')を介してプランキャッシュをフラッシュすると、CPU負荷は通常に戻りません。 最大メモリ設定を変更すると、天候に関係なく問題が解決するため、問題は最大サーバーメモリ設定に直接関連しているようには見えません。そのため、メモリ設定を変更する他のことを理解し、その情報を使用してCPUスパイクの根本的な原因を特定しようとしています。

1
SSMSの「未接続」クエリウィンドウを元の接続に再接続する
必要なサーバー名を手動で選択せずに、そのクエリで使用された元の接続に「接続されていない」クエリウィンドウを再接続する簡単な方法はありますか?SQLエディターのツールバーの[接続]ボタンをクリックするか、右クリック-> [接続]-> [接続...]をクリックすると、サーバー名はデフォルトで、その特定のクエリウィンドウで使用された最後の接続ではなく、そのSSMSセッションで使用された最後の接続になります。 。 1日の終わりにラップトップを家に持ち帰ると、開いているすべてのウィンドウは、次に使用するときに接続されないように設定されます。理想的には、すべてを元の接続に再接続できるようにしたいのですが、一度に1つのクエリでも可能かどうかはわかりません。

3
100 GBテーブルにクラスター化インデックスを作成する方法
約30億行のディスク容量約104 GBを占めるヒープテーブルがあります。このテーブルの[ WeekEndingDate]列にクラスター化インデックスを作成しようとしています。データファイルには約200 GBの空き容量があり、tempdbには約280 GBの空き容量があります。 私は2つの異なる方法を試しました。最初に、次のコマンドを使用してテーブルに直接インデックスを作成しました。 CREATE CLUSTERED INDEX CX_WT_FOLD_HISTORY ON WT_FOLD_HISTORY (WeekEndingDate ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = ON, IGNORE_DUP_KEY = OFF , ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, DATA_COMPRESSION = PAGE) 私は両方のそれを試してみましたSORT_IN_TEMPDB = ONとOFF。使用するONとtempdbがOFFいっぱいになり、データドライブがいっぱいになります。 他の方法は、必要なインデックスで新しい空のテーブルを作成し、ヒープから新しいテーブルにレコードを挿入することでした。データドライブがいっぱいになった後も、これは失敗しました。 何をすべきかに関するその他の提案。私が読んだほとんどのことは、インデックスを作成するときにワークスペースとして使用するには、テーブルの約1.2倍のサイズが必要だと述べています。私はそれよりはるかに多く持っていますが、それでも失敗します。任意の提案をいただければ幸いです。 これが私の元のヒープテーブル構造です。 CREATE TABLE [dbo].[WT_FOLD_HISTORY]( [WeekEndingDate] …

2
SQL Server 2012 SP3でのメモリ不足の問題
SQL ServerのOOMエラーが定期的に発生しました。SQLServerが自動的にシャットダウンし、常に夜間に発生し、誰も使用しておらず、SQLエージェントジョブも実行されていませんでした。 ここに典型的なエラーがあります: 2017年8月17日19:31:17、spid100、不明、このクエリを実行するには、リソースプール '内部'にシステムメモリが不足しています。 2017年8月17日19:31:17、spid100、不明、エラー:701重要度:17状態:123。 08/17/2017 19:31:17、spid112、Unknown、Error:18056 Severity:20 State:29.(Params :)。フォーマット中にエラーが発生したため、エラーは簡略モードで出力されます。ETW通知などのトレースはスキップされます。 サーバー情報は次のとおりです。 10GB MIN SQLサーバーメモリ 21GB MAX SQLサーバーメモリ サーバー上に4つのDBのみ サイズはそれぞれ1〜2 GBです Tempdbのサイズが1 GBを超えることはありません(10 GBに自動拡張するように設定) インデックスはすべて低フラグであり、統計が更新されます バージョン: Microsoft SQL Server 2012 (SP3) (KB3072779) - 11.0.6020.0 (X64) Oct 20 2015 15:36:27 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.3 …

1
SQL Server 2016にはまだsqlmaint.exeが含まれていますか?
文書によると、(非推奨のデータベースエンジンは、SQL Serverの2016年に機能)、sqlmaint.exeまだ(強調鉱山)利用可能であるべきです: このトピックでは、SQL Server 2016で引き続き利用できる、非推奨のSQL Serverデータベースエンジン機能について説明します。これらの機能は、SQL Serverの将来のリリースで削除される予定です。 ... ツール:sqlmaintユーティリティ... それは間違いなくされて表示されていない上廃止される機能のリスト。 しかし、sqlmaint.exe最近インストールしたSQL Server 2016 Expressシステムでは見つかりません。以前のバージョンでは、と同じフォルダにありましたsqlserver.exe。 ドキュメントは間違っていますか?または、ファイルの場所が移動しましたか?または、インストールプロセス中に何かを見逃しましたか? (注:この問題を再現するコメントに励まされて、私はこのためのMicrosoft Connectエントリを作成しました。これはUserVoiceに移行されました。)

1
varbinary(max)からデータをnullにした後でDBを縮小する最良の方法は?
varbinary(max)型のフィールドに大量のデータが格納されたデータベースがあります。ある時点で、すべての行ではなく、ほとんどの行のデータをパージできます。私たちの計画は、そのフィールドをnull可能にし、不要になったときにデータをnullにすることです。それができたら、DBのサイズを小さくしたいと思います。これを達成するための最良の方法は何ですか? 現在の設定でスペースを再利用する良い方法がない場合、私が持っているアイデアの1つは、メインテーブルへのキーとデータフィールドの2つの列だけを持つ別のテーブルにデータフィールドを移動することです。次に、不要になった行を削除するだけです。(そして、何らかの縮小を行います。)ただし、これは、既存のフィールドを単にnull可能にするよりも、はるかに難しい変更です。 注:データベースファイルのサイズを小さくすることはあまり気にしていませんが、新しく解放されたスペースが再利用可能になることは気にします。 DBサイズの90%以上がこの1つのフィールドです。私はすでに3TBです。

2
各SQLインスタンスのSPNエントリはどのように見えるべきですか?
適切なKerberos接続を取得するためにSPN(サービスプリンシパル名)を正確にフォーマットする方法と、SQLインスタンスごとに必要な数について、矛盾する情報を見つけています。 この2017年のMS文書には、次のものが含まれています。 SQL Server 2008以降、TCP / IP、名前付きパイプ、および共有メモリでのKerberos認証をサポートするために、SPN形式が変更されました。名前付きインスタンスとデフォルトインスタンスでサポートされるSPN形式は次のとおりです。 名前付きインスタンス: MSSQLSvc/FQDN:[port|instancename] デフォルトのインスタンス: MSSQLSvc/FQDN:port|MSSQLSvc/FQDN 新しいSPN形式では、ポート番号は必要ありません。つまり、マルチポートサーバーまたはポート番号を使用しないプロトコルは、Kerberos認証を使用できます。 この最後の段落は、次のいずれか1つのエントリのみが必要であることを意味します。 名前付きインスタンス: MSSQLSvc/sqlbox1.mydomain.org/instance2 デフォルトのインスタンス: MSSQLSvc/sqlbox1.mydomain.org これは、ポート番号だけでなく、使用する名前に関しても、この古い(2011)MSドキュメントと矛盾しているようです。 SPNを作成するには、SQL ServerのNetBIOS名または完全修飾ドメイン名(FQDN)を使用できます。ただし、NetBIOS名とFQDNの両方のSPNを作成する必要があります。 私の環境にすでに存在するSPNを見ると、さまざまな組み合わせがあり、一部のサーバーには最大4つのエントリがあります。 MSSQLSvc/sqlbox1 MSSQLSvc/sqlbox1:1433 MSSQLSvc/sqlbox1.mydomain.org MSSQLSvc/sqlbox1.mydomain.org:1433 MS自身のKerberos構成マネージャーでさえ、最後の2つのバージョンを(適切に難読化して)生成したいようです: 同様に、既存の名前付きインスタンスの場合、奇妙な組み合わせが見られます。それらの一部はほぼ確実に無効です。 MSSQLSvc/sqlbox1:1522 MSSQLSvc/sqlbox1:instance2 MSSQLSvc/sqlbox1.mydomain.org:1522 MSSQLSvc/sqlbox1.mydomain.org:instance2 MSSQLSvc/sqlbox1.mydomain.org/instance2 MSSQLSvc/sqlbox1.mydomain.org:1522:instance2 では、環境でTCPを使用するだけの場合、デフォルトインスタンスと名前付きインスタンスの両方について、実際のDSNはどのように見えるべきでしょうか。 ポートを含めるかどうか。または、ポートのあるものとないものを含めますか? FQDNのみを使用するか、Netbios名のみのエントリが必要ですか?それとも、名前付きパイプ(私たちはそうではありません)を使用している場合のみでしょうか? (コンテキストでは、SQL 2005から2014を実行し、一部はクラスター化され、その他はスタンドアロンです。接続はTCPのみを介して行われ、名前付きパイプは構成マネージャーで無効になっています。SQLサービスアカウントがそれらを作成できるようにする代わりに、手動で修正/作成します。サーバーの起動。)

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