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

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

3
開発者はLocalDBと「開発」インスタンスの使用を許可する必要がありますか?
以前にここに投稿された「開発者は本番データベースにクエリを実行できるようにする必要がありますか?」という質問の筋によく似ています。 多くの企業は、開発者が開発マシンにSQL Server Expressなどをインストールするのを防ぎ、代わりに集中型開発SQL Serverの使用を促進しています。 具体的には、次のことを確実にするために行われます。 開発サーバーとプロダクション間のパッチレベルの一貫性 上記のパッチを証明および検証する機能 データセキュリティ; 開発サーバー上のデータのみが開発に使用されます 回復性; データは回復可能であり、まだバックアップされています 本番環境に移行すると問題が発生する可能性がある照合順序の違い 私にとって、これらの引数はすべておそらく無効ですが、パッチの引数は例外です。しかし、ローカルマシン上のデータベースがテストではなく開発アクティビティのみに使用されている場合、アプリケーションがテスト/ UATなどを介して本番環境に移行すると、パッチが適用されたことが証明されます。 照合順序は、データベースにとって問題であるかのように、有効な理由ではないようです。作成時に設定する必要があります。私が知る限り、SharePointとSCCMのみがこの問題を抱えています;) ここで、それが開発専用であり、データベースが本番環境に「移動」されず、唯一の移動は次のようになると想定します。 本番環境へのデプロイ用に生成されるデータベースを作成したスクリプト 「本番」サードパーティシステムからのバックアップは、検証と開発に適した場所で復元および切り捨てられます 誰でも何か問題を見ることができますか?何か不足していますか? 最大の懸念の1つは、ローカルのdbインスタンスが古くなってしまうことですが、これはソフトウェア管理の問題であり、DBAのIMOではありません。

2
昇順の主要な問題-「静止」というブランドの主要な列-SQL Server
私はデータベースで実行速度の遅いクエリを調査しており、これが古典的な昇順キー問題であると結論付けました。新しい行がほぼ常に挿入され、DBから最新のデータを引き出すための特定のSQLが30分ごとに実行されるため、30分ごとに統計を更新する最初のオプションは、リソースを浪費する可能性があるようです。 したがって、私はトレースフラグ2389を調べましたが、これは原則的には役立つはずですが、先行列を昇順としてブランド化する必要があり、トレースフラグ2388を使用して(PK)インデックス統計を確認すると、先行列が実際に定常としてブランド化されます-同時に更新される他のテーブルのいくつかのPKインデックスのためです。 Stationaryのブランド化の結果に関するガイダンスはそれほど多くないようですが、KB2952101は、挿入の90%未満が古い最大値よりも大きい場合、それはStationaryとして分類されると述べています。すべての挿入は新しい送信であり、最初の列はbigint IDENTITY列であるため、挿入の100%は以前の最大値より大きくなければなりません。 それで、私の質問は、明らかに昇順であるのに、なぜ列がステーショナリーとしてブランド化されるのでしょうか? 毎日実行中のSQLでこの問題を解決するための以前の試み(これは非常にうまく機能しました)により、このテーブルの統計を毎晩更新するジョブがセットアップされました。更新ではFULLSCANが実行されないため、サンプリングされたスキャンで新しい行が欠落することがあり、常に昇順で表示されるとは限りませんか? これに影響を与える可能性があると私が考えることができる他の唯一のことは、特定の期間を超えて行を削除する舞台裏でアーカイブジョブが実行されていることです。これはブランディングに影響を与える可能性がありますか? サーバーはSQL Server 2012 SP1です。 更新:別の日、別の統計情報の更新-同じ静止したブランド。前回の統計更新以降、28049の新しい挿入がありました。各行には、挿入されたときのタイムスタンプがあるため、timestamp <'20161102'であるテーブルからmax(id)を選択すると23313455が得られます。 これらの違いは28049の新しい挿入です。ご覧のように、すべての新しい挿入には新しい昇順キーが(期待どおりに)与えられています。これは、先頭の列を固定ではなく昇順としてブランド化する必要があることを示しています。 同じ期間に、アーカイブジョブによって213,629行が削除されました(古いデータは徐々に消去されます)。行数の削減が定常的なブランディングに貢献する可能性はありますか?私はこれを以前にテストしたことがあり、それが何かの違いをもたらすようには見えませんでした。 更新2:別の日、別の統計が更新され、列に昇順のフラグが付けられます!これに影響する削除に関する理論に従って、私は削除と比較して挿入である更新のパーセンテージをチェックしました、そして昨日の13%は挿入でしたが、過去2日間の挿入は約12%を占めました。それが決定的なものになるとは思いません。 興味深いことに、このメインテーブルに挿入された各行に対して平均4行が挿入され、同時に統計が更新される関連テーブルで、IDENTITY PK列はまだ静止していますか? 更新3:週末に追加の挿入物を取得します。今朝、リーディングコラムはステーショナリーに戻りました。前回の統計更新では、46840の挿入と34776の削除しかありませんでした。 繰り返しになりますが、興味深いことに、上記で説明した関連テーブルには、昇順というブランドの主要な列があります。これを説明できるドキュメントはありませんか? 更新4:約1週間が経過しました。アーカイブジョブによりバックログがクリアされたため、挿入される行数の約3分の2を一貫して削除しています。統計は、すべて同じように比例して更新されているにもかかわらず、関連するテーブル全体で混合結果を示しています。1つは定常を示し、2つは上昇を示しています。

3
SUM(列)の合計を計算します
特定のアイテムの数量(itemid)と製品の日付コード(proddte)を合計するこのコードがあります。 select sum(qty), itemid, proddte from testtable where .... group by itemid, proddte 私がやりたいのは、にqty関係なくすべての合計を取得することですitemid/proddte。私が試してみました: select sum(qty), itemid, proddte, sum(qty) over() as grandtotal from testtable where .... group by itemid, proddte しかし、それは私も持っていなければならないと言うqtyにgroup by句。そうした場合、結果は期待した結果とは異なります。 すべての行が同じ値で、個別の列として表される必要はありません。全体の合計を表示できる限り、どのような表現でも受け入れられます。
9 sql-server  sum 

1
インデックス列の順序のWHERE-JOIN-ORDER-(SELECT)ルールは間違っていますか?
より大きなクエリの一部であるこの(サブ)クエリを改善しようとしています。 select SUM(isnull(IP.Q, 0)) as Q, IP.OPID from IP inner join I on I.ID = IP.IID where IP.Deleted=0 and (I.Status > 0 AND I.Status <= 19) group by IP.OPID Sentry Plan Explorerは、上記のクエリによって実行された、テーブルdbo。[I]の比較的コストのかかるキールックアップを指摘しました。 テーブルdbo.I CREATE TABLE [dbo].[I] ( [ID] UNIQUEIDENTIFIER NOT NULL, [OID] UNIQUEIDENTIFIER NOT NULL, [] UNIQUEIDENTIFIER NOT NULL, [] …

1
演算子のハッシュ一致内部結合を削除することによるクエリパフォーマンスの向上
以下のこの質問の内容を自分の状況に適用しようとしていますが、可能であれば、演算子Hash Match(Inner Join)をどのようにして取り除くことができるのか、少し混乱しています。 SQL Serverクエリのパフォーマンス-ハッシュマッチ(内部結合)の必要性の排除 私は10%の費用に気づき、それを減らすことができるかどうか疑問に思っていました。以下のクエリプランを参照してください。 この作業は、今日調整しなければならなかったクエリサッドから来ています。 SELECT c.AccountCode, MIN(d.CustomerSID) FROM Stage.Customer c INNER JOIN Dimensions.Customer d ON c.Email = d.Email OR ( c.HomePostCode = d.HomePostCode AND c.StrSurname = d.strSurname ) GROUP BY c.AccountCode これらのインデックスを追加した後: --------------------------------------------------------------------- -- Create the indexes --------------------------------------------------------------------- CREATE NONCLUSTERED INDEX IDX_Stage_Customer_HOME_SURNAME_INCL ON Stage.Customer(HomePostCode ,strSurname) INCLUDE (AccountCode) …

2
主キーが含まれている場合、複合インデックスを一意としてマークする必要がありますか?
主キーを持ついくつかのテーブルがあるとします。例: CREATE TABLE Customers ( CustomerID int NOT NULL PRIMARY KEY, FirstName nvarchar(50), LastName nvarchar(50), Address nvarchar(200), Email nvarchar(260) --... ) に一意の主キーがありCustomerIDます。 伝統的に私はいくつかの追加のカバーするインデックスが必要になるかもしれません。たとえば、CustomerIDまたはのいずれかでユーザーをすばやく見つけるにはEmail: CREATE INDEX IX_Customers_CustomerIDEmail ON Customers ( CustomerID, Email ) そして、これらは私が何十年もの間作成してきた種類のインデックスです。 一意である必要はありませんが、実際には インデックス自体は、テーブルスキャンを回避するために存在します。これは、パフォーマンスを向上させるためのカバリングインデックスです(一意性を強制するための制約としてインデックスはありません)。 今日私はちょっとした情報を思い出しました-SQL Serverは次の事実を利用できます: 列に外部キー制約があります 列には一意のインデックスがあります 制約は信頼されています クエリの実行を最適化するのに役立ちます。実際、SQL Serverインデックスデザインガイドから: データが一意であり、一意性を適用したい場合は、列の同じ組み合わせで一意でないインデックスの代わりに一意のインデックスを作成すると、クエリオプティマイザーに追加情報が提供され、より効率的な実行プランを作成できます。この場合は、一意のインデックスを作成すること(できればUNIQUE制約を作成すること)をお勧めします。 私の複数列インデックスに主キーが含まれているとすると、この複合インデックスは事実上一意になります。挿入や更新のたびにSQL Serverで強制する必要があるのは、特に制約ではありません。しかし、実際には、この非クラスター化インデックスは一意です。 このデファクトユニークインデックスを実際にユニークであるとマークすることに何か利点はありますか? CREATE UNIQUE INDEX IX_Customers_CustomerIDEmail …

4
テーブルごとにデータとディスク使用の内訳を表示
SQL Server 2008 R2データベースをいくつかの展開されたプログラムで使用しています。 質問:データベース内のすべてのテーブルについて、各テーブルが消費する領域を表示し、論理領域とディスク領域を区別する簡単な方法はありますか? SSMS(Management Studio)を使用している場合、データベースに表示されるストレージプロパティは167 MBであり、3 MBが「利用可能」です(約適切なサイズですが、3 MBが利用可能かどうか心配です-これは心配する限界です) 、十分なディスク容量があることを知っているとしたら?) 各テーブルにドリルダウンできますが、それを行うには永遠にかかります。 独自のクエリを記述してテストできることはわかっていますが、これを行う簡単な(組み込み?)方法が既にあるかどうかを知りたいです。

1
I / Oはデータベースでフリーズされ、I / Oは完全なバックアップのログで毎日データベースで再開されました
毎日のように、ログファイルにメッセージが表示されたと言いたいです。 まず、I / Oがデータベース(DatabaseName)でフリーズしましたというメッセージがログに表示されます。メッセージは I / Oはデータベース(DatabaseName)で凍結されています。ユーザーの操作は必要ありません。ただし、I / Oがすぐに再開されない場合は、バックアップをキャンセルできます。 そして、I / OはDatabase(DatabaseName)メッセージで再開されました。 データベース(DatabaseName)でI / Oが再開されました。ユーザーの操作は必要ありません。 そして最後に、このようなメッセージでデータベースのバックアップが成功しました ユーザーの操作は必要ありません それは私の実稼働監査データベースであり、ソフトウェア環境を持つことは次のようなものです: Windows Server 2012 R2 SQL Server 2012 VMware Tools 私の運用データベース「復旧モデル」は「完全」復旧モデルです。そして、SQL ServerのどのログインIDから、メンテナンスプランバックアップがセットアップされました。これには、すべてのデータベースに対する「sysadmin」特権があります。 バックアップには、「メンテナンスプラン」バックアップを通じて、毎日午後4時のような特定のタイムスケジュールで設定されています。また、Always Backupはスケジュールされた間隔で正常に実行されました。 なぜそのような種類のログメッセージがスケジュールバックアップ時に生成されるのですか。この種のメッセージは、私の運用データベースのパフォーマンスに影響しますか?本番データベースの(バックアップ/復元)データの整合性に問題があります。 任意の提案をいただければ幸いです。

1
複数のカスケードパスを使用できないのはなぜですか?
複数のカスケードパスについて多くの質問が出されていることがわかります。例えば: /programming/851625/foreign-key-constraint-may-cause-cycles-or-multiple-cascade-paths /programming/6065501/multiple-cascade-delete-path-in-many-many-relationship-ef-4-1 /programming/27613117/introducing-foreign-key-constraint-may-cause-cycles-or-multiple-cascade-paths-s ただし、私が見て理解していることから、関連するマスターレコードの削除の1つの条件だけでなく、多くの子レコードを削除することはまったく問題ありません。 質問では、SQL Serverがこれを防止して安全を確保しようとしていると言われていますが、複数のカスケードパスがある場合に何が問題になるのか、安全にするためにどのような問題が発生しないのかはわかりません。 誰かが私に分かりやすく簡単な言葉で、できれば複数のカスケードパスの場合に問題が発生する可能性のある例を使用して説明できることを願っています。

2
少量のデータでパーティション化するときに現実的なクエリプランを取得する
パーティション分割を使用して、ロックのためにOLTPシステムエクスペリエンスがブロックされる量を減らし、パーティションIDに基づいて作業テーブルを100個のパーティションに分割します。ただし、テスト中に、実行プランが予想したとおりに選択されていないことがわかりました。 テストシナリオは、300,000件の連絡先レコード(各連絡先のデータは2つのテーブルに分割されています)を持つ単一の顧客であり、すべて単一のパーティションに存在し、顧客のパーティションで500の特定の行を検索するクエリがあります。ハッシュ一致のようなものが計画のかなり早い段階で不要な299,500を排除することを期待しますが、SQL Serverはテーブル全体のレコード数を取得し、すべてのパーティションで平均化することを選択しているようです。処理する多くのレコード。これにより、ネストされたループが選択され、プロセスのかなり後の方で不要なレコードが削除されます。通常、これには、パーティション分割されていないテーブルに対する同じクエリの9倍の時間がかかります。 奇妙なことに、selectにオプション(再コンパイル)を追加すると賢明な計画が得られますが、なぜこれが違いを生むのか途方に暮れています。これはストアドプロシージャではありません。テスト中に、各テストを実行する前にプロシージャキャッシュをクリアします。 この動作は、関係するテーブルが分割されていない場合には見られません。つまり、推定される行数が実際の数と一致するため、毎回適切なプランが選択されます。 この動作についての洞察はいただければ幸いです。 スキーマのセットアップ: USE [Scratch] GO CREATE SCHEMA part GO CREATE PARTITION FUNCTION [ContactPartition](smallint) AS RANGE LEFT FOR VALUES (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, …

4
ドメインコントローラーにSQLサーバーをインストールしない理由が必要です
私は小さな会社のシステム管理者です。ここで、Windows Server 2008 R2をロールアウトすることを検討します。Active Directoryの実装を計画しています。また、RDMSをSQL Server 2000からSQL Server 2014にアップグレードしたいと考えています。 組織の規模により、1台のサーバーしか購入できないため、同じマシンにADとSQL Server 2014の両方を実装する予定です。ただし、マイクロソフトでは、SQL Server 2014をドメインコントローラーにインストールしないことをお勧めします。 理由は確認しましたが、何が問題なのかわからないので、以下の質問に誰かが答えてくれればとても助かります。 ローカルサービスアカウントのドメインコントローラーでSQL Serverサービスを実行することはできません。→ドメインユーザーアカウントのドメインコントローラーでSQL Serverを実行するとどうなりますか? SQL Serverがコンピューターにインストールされた後、コンピューターをドメインメンバーからドメインコントローラーに変更することはできません。ホストコンピュータをドメインコントローラに変更する前に、SQL Serverをアンインストールする必要があります。→SQL Server 2014をインストールする前にサーバーをドメインコントローラーに昇格させる予定です。メンバーサーバーは私たちの唯一のサーバーであるため、プロモートを解除する予定はありません。私たちの計画は間違っていますか? SQL Serverがコンピューターにインストールされた後、コンピューターをドメインコントローラーからドメインメンバーに変更することはできません。ホストコンピューターをドメインメンバーに変更する前に、SQL Serverをアンインストールする必要があります。→これが私たちの唯一のサーバーであるため、メンバーサーバーへの昇格は予定していません。私たちの計画は間違っていますか? SQL Serverフェールオーバークラスターインスタンスは、クラスターノードがドメインコントローラーである場合はサポートされません。→フェイルオーバークラスターの設置は予定していないので問題ないと思います。私たちは間違っていますか? SQL Serverセットアップでは、読み取り専用ドメインコントローラーでセキュリティグループを作成したり、SQL Serverサービスアカウントをプロビジョニングしたりすることはできません。このシナリオでは、セットアップは失敗します。→サーバーが1つしかないので、読み取り専用のドメインコントローラーにはならないので問題ないと思います。私たちは間違っていますか? 実際、(1)をクリアすれば、SQL Server 2014をドメインコントローラーにインストールできます。 すべての文章をお読みいただきありがとうございます。誰かが答えてくれるといいのですが。

4
SQL Serverデータファイルの空き領域の監視
SQL Serverデータベースでの自動拡張操作を回避するために、mdf / ndfファイルを手動で大きなサイズに変更しました。ファイルの方が大きいので、ディスクパーティションの空き領域はほとんどなく、システム管理者は、領域が不足していることを警告し続けます。 サイズを変更したため、データファイルには多くの空き領域がありますが、ファイルサイズ/ディスクの空き領域を確認しても気付かないでしょう。 データファイルの実際の使用率を監視するにはどうすればよいですか?私は、perfmonカウンタを使用したいと思います。ファイルが実際にスペースを使い果たすと、SQL Serverは十分なスペースを割り当てることができず、クラッシュするだろうと私は確信しています。

2
データベースがオフラインになったのはいつですか
いくつかのSQLデータベースがいつオフラインになったかを知る方法を見つけようとしています。 ログを確認しましたが、そのような情報は見つかりませんでした。さらに、デフォルトのトレースが有効になっていません。 以前はオフラインでDBAがいましたが、電子メールや書面によるコミュニケーションはなかったという情報があります。 これに関する情報を見つけることができますか? 提案してください、ありがとう!

3
SQL Server Management Studio 2014バックアップ-プロパティデバイスの設定エラー
最近、ローカルSQL Serverをバージョン2014にアップグレードしました。 これにより、SSMS 2014もインストールされました。SQLServer Management Studio 2014を使用してバックアップ(ローカルとリモートの両方、サーバーバージョン2008〜2014)を作成すると、次のエラーが発生します。 このアクションを実行するには、プロパティデバイスを設定します。 ドロップダウンで[ディスク]を選択し、バックアップのパスも選択しました。パスはサーバー上に存在し、このパスに対する完全な権限を持っています。 同じ設定で古いSQL Server Management Studio 2012を使用すると、バックアップは問題なく機能します。 T-SQLを使用しても機能しますBACKUP DATABASE SOMEDATABASE TO DISK = 'D:\SomeDir\SomeDataBase.bak' WITH COMPRESSION したがって、問題は管理ツールバージョン2014に固有のものである必要があります。インターネットで見つけた唯一の解決策は、パスが見つからなかったことによるものでしたが、私には当てはまりません。 誰かがこの問題を経験したり解決したりしていますか? 編集:スクリーンショットを追加(UIはドイツ語) 翻訳: -Vollständig: Full -Datenträger:Disk メディアとセキュリティのオプションは変更されていません。マスターデータベースは例として取り上げただけで、他のすべてのデータベースで発生します。 2015年7月21日更新 この問題は、ドイツ語版のWindowsで英語の言語パックを使用していて、ドイツ語版のSQL Server 2014インストールを使用していることに関連しているようです。Windowsの表示言語がドイツ語に設定されている場合、問題は解消されます。Windowsの表示言語が英語に設定されている場合、問題が再発します。 すべての貢献に感謝します。

2
ドメイン管理者がSQL Serverに接続できない
Windows Server 2012 R2ドメインコントローラーとデータベースサーバー(W2K12R2 / SQL Server 2012)があります。 許可されたユーザーグループとして、「ドメイン管理者」グループにsysadmin権限を付与しました。 しかし、どういうわけか、ドメイン管理者はそのSQL Serverに接続できませんが、許可されたユーザーとしてドメイン管理者ユーザーを直接追加すると、機能します。Active Directoryは機能します。RDPログインが機能します。何か不足していますか? グループ「domain-admins」全体へのアクセスを許可する方法を誰かが知っていますか? エラーメッセージは次のとおりです。 サーバー名:SRV-DB エラー番号:18456 シュヴェレグラード:14 ステータス:1 コードの行:65536 イベントログには次のように書かれています(翻訳済み): インフラストラクチャ障害のあるトークンベースのサーバーアクセスのチェック中にエラーが発生しました。 状態は "1"です。domain-adminとしてRDPでそのdb-serverにログオンします。「管理者として実行」でSSMSを明示的に起動する必要があります。その後、「localhost」にアクセスできます。SSMSを管理者として開始しない場合、それはできません。「domain-admins」グループに参加するだけで十分だと思いました。

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