データベース管理者

データベースのスキルを向上させ、コミュニティの他の人から学びたいデータベースの専門家向けのQ&A

1
主キーをファイルグループに移動する(SQL Server 2012)
クラスター化された主キーを新しいファイルグループに移動するにはどうすればよいですか?私はすでに可能な「アルゴリズム」を見つけましたが、恐ろしく非効率的です: クラスター化されていないインデックス付きのドロップ(それらを再ソートして再構築する必要があります) クラスター化インデックスを削除します(テーブル全体を再ソートする必要があります) 新しい主キー制約を作成します(巨大なソート操作) すべての非クラスター化インデックスを作成する(並べ替えと書き込みが必要) より効率的な方法はありますか?これはひどく非効率的であり、弱いサーバーではテーブルのサイズが50GBであるため、時間がかかります。 これらすべてをスキップして、新しいファイルグループで再構築する方法はありませんか?データの並べ替えは必要ありません。

4
GROUP BYおよびORDER BYを使用した大きなテーブルでのクエリが遅い
次のような、720万タプルのテーブルがあります。 table public.methods column | type | attributes --------+-----------------------+---------------------------------------------------- id | integer | not null DEFAULT nextval('methodkey'::regclass) hash | character varying(32) | not null string | character varying | not null method | character varying | not null file | character varying | not null type | character varying | …

2
サブセット集合体の制約のモデリング?
私はPostgreSQLを使用していますが、ほとんどのトップエンドデータベースには同様の機能が必要であり、さらにそれらのソリューションがソリューションを刺激する可能性があると考えているため、このPostgreSQL固有のものを考慮しないでください。 私はこの問題を解決しようとする最初の人ではないことを知っているので、ここで質問する価値があると思いますが、すべてのトランザクションが基本的にバランスが取れるように会計データをモデル化するコストを評価しようとしています。アカウンティングデータは追加専用です。ここでの全体的な制約(擬似コードで記述)は、おおよそ次のようになります。 CREATE TABLE journal_entry ( id bigserial not null unique, --artificial candidate key journal_type_id int references journal_type(id), reference text, -- source document identifier, unique per journal date_posted date not null, PRIMARY KEY (journal_type_id, reference) ); CREATE TABLE journal_line ( entry_id bigint references journal_entry(id), account_id int not null references account(id), …

1
UPSERT-MERGEまたは@@ rowcountに代わるより良い代替手段はありますか?[閉まっている]
ここで何が尋ねられているかを伝えるのは難しいです。この質問は曖昧、曖昧、不完全、過度に広範、または修辞的であり、現在の形式では合理的に答えることができません。この質問を明確にして、再開できるようにするには、ヘルプセンターに アクセスしてください。 7年前に閉鎖されました。 UPSERTの概念に似たT-SQLコマンドに出会ったことがありますか?オプション(1)または(2)を使用してINSERT | UPDATE操作を実行すると、過度に複雑でエラーが発生しやすくなります。 目的 目的のレコード(この場合、employee_id 1)が最新であり、本質的に同じクエリを2回記述する必要がないことを確認します。 環境 テーブル名:従業員 従業員ID:主キーがあり、IDプロパティがtrueに設定されています オプション SQL UPDATEを実行... @@ rowcount = 0および@@ error = 0をチェック...必要に応じてSQL INSERTを実行 con:同じクエリを、挿入として1回、更新として1回、事実上2回記述する必要があります con:より多くのコード=より多くの時間入力 con:より多くのコード=より多くのエラーの余地 /programming/1106717/how-to-implement-a-conditional-upsert-stored-procedure「@@ rowcountを使用して更新」 SQL MERGEを実行します con:同じクエリを、挿入として1回、更新として1回、事実上2回記述する必要があります con:より多くのコード=より多くの時間入力 con:より多くのコード=より多くのエラーの余地 http://technet.microsoft.com/en-us/library/bb510625.aspx「T-SQLマージ」 SQL UPSERTを実行します(機能は存在しません) pro:データとテーブルの関係を一度定義します(SQL ServerがINSERTかUPDATEかどうかを心配させます) pro:コードの削減=実装の高速化 pro:少ないコード=低い確率 UPSERTの例 UPSERT employeee(employee_id、employee_number、job_title、first_name、middle_name、surname、modified_at)VALUES(1、'00 -124AB37 '、' Manager '、' John '、' T …

3
サービスマスターキーをバックアップする必要があるのはいつですか?
トランスペアレントデータ暗号化に関するドキュメントとホワイトペーパーを読んでいます。一部のドキュメントでは、サービスマスターキーのバックアップについても言及されています(説明のため、データベースマスターキーについては説明していません)。サービスマスターキーを使用せずに、サーバーA(バックアップ)からサーバーB(復元)にTDE暗号化を使用してデータベースをバックアップ/復元できたため、なぜこれが必要なのか正確に理解していません。 どのようなシナリオでサービスマスターキーを復元する必要がありますか?

3
並列統計更新
SQL Server 2008以降ではUPDATE STATISTICS WITH FULLSCAN、シングルスレッド操作ですか、それとも並列処理を使用できますか?デフォルトのサンプリングによる統計の更新はどうですか?並列処理を使用できますか?MAXDOPupdate statsで指定するオプションが表示されません。

2
データベースの復元を削除する方法
SQL Server 2008 R2でログ配布を実行しています。 セカンダリデータベースドライブの領域が不足し、ログ配布トランザクションログを適用していなかった状況があります。 これを修正する方法は、セカンダリでデータベースを削除し、ログ配布をゼロから構成することです。 現在の問題は、セカンダリデータベースが復元状態にあり、削除できないことです。どうすれば続行できますか? たとえば、オフラインにしようとすると、エラーが発生します。 ALTER DATABASE is not permitted while the database is in the Restoring state.

2
単一のビューへのアクセス権を持つユーザーを追加するにはどうすればよいですか?
MSSQL Server Management Studio 2008を使用していますが、データ調整のためにビューをサードパーティに公開する必要があります。適切なビューを作成しましたが、ユーザーを作成して、そのユーザーにビューから選択するための適切なアクセス許可を与えることができません。 ウィザードに従ってログインとユーザーを作成し、[選択可能]チェックボックスをオンにして[セキュリティ保護可能]セクションにビューを追加しました。すべてが順調に見えましたが、そのユーザーとしてログインして「Select * from MyViewName」を実行しようとすると、選択権限が拒否されたことがわかりました。 私はユーザーを再作成し(今回はウィザードの代わりにSQLを使用するだけです)、選択権限を明示的に付与しましたが、今ではエラーが発生しています:( Msg 916, Level 14, State 1, Line 2 The server principal "username" is not able to access the database "unrelated_db" under the current security context.無関係なデータベースにアクセスしようとする理由がわかりません...) ここからどこに行くべきか本当にわかりません。繰り返しますが、基本的に必要なのは、サードパーティにデータベースに接続してこのビューから選択させるために、サードパーティに提供できるユーザーを作成することです。

1
フィルファクターに基づくインデックス内のデータの動作
デフォルトのFILL FACTORが20のデータベースがあるとします。データが挿入されるたびに、最大20%のページのみが作成されますか? 私の理解では、データが挿入されると、ページ内のデータの約20%になります。ただし、データが更新されると、インデックスの20%以上に拡張され、データがいっぱいになってページ分割が生成されます。

5
SQL Agentジョブを視覚化するための優れたツールは何ですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、データベース管理者のStack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 エージェントジョブを管理するための組み込みのMS SQL Studioツールは、少しイライラするものです。役に立つツールはありますか? ちなみに、このようなツールで見たいものが3つあります。 どのジョブがいつ、どのくらいの期間実行され、成功したかどうかのグラフィカルな要約。 ジョブアクティビティモニターのような現在のステータスビュー。ただし、ほぼリアルタイムで更新されます。 ジョブを複製または変更するためのより便利なインターフェイス(たとえば、モーダルダイアログによってブロックされることなく2つのジョブステップを比較する)。 これを処理するための小さなアプリを書くのはおそらく簡単でしょうが、誰かがすでにそれをすでに行っており、それをより良くしているでしょう。 これは明らかに主観的な質問なので、ある種のmodが過去をさまよう場合は、気軽にCWにしてください。

3
フルテキストインデックスのあるテーブルで、単純なALTER TABLEコマンドが非常に長い時間がかかるのはなぜですか?
列にフルテキストインデックスが作成された大きな名前(〜6700万行)の名前と値のテーブルがありDataValueます。 次のコマンドを実行しようとすると: ALTER TABLE VisitorData ADD NumericValue bit DEFAULT 0 NOT NULL; 1時間10分間実行されVisitorDataますが、約6,700万行を含むテーブルでは完了しません。 なぜこれに時間がかかり、完了しないのですか? 私はそれについて何ができますか? 表の詳細は次のとおりです。 CREATE TABLE [dbo].[VisitorData]( [VisitorID] [int] NOT NULL, [DataName] [varchar](80) NOT NULL, [DataValue] [nvarchar](3800) NOT NULL, [EncryptedDataValue] [varbinary](max) NULL, [VisitorDataID] [int] IDENTITY(1,1) NOT NULL, CONSTRAINT [PK_VisitorData_VisitorDataID] PRIMARY KEY CLUSTERED ( [VisitorDataID] ASC ) WITH (PAD_INDEX …

2
SQL ServerのVARCHAR列幅
Webを検索すると、過度に広いVARCHAR列を指定したときにパフォーマンスに影響があるかどうか、たとえばVARCHAR(30)がおそらくする場合のVARCHAR(255)について、矛盾したアドバイスが見つかりました。 行全体が8060バイトを超えると、パフォーマンスが低下するという合意に一貫して同意します。それ以外は、意見の相違があります。 その主張は本当The default is SET ANSI PADDING ON = potential for lots of trailing spacesですか?行の合計幅が8060未満である限り、VARCHAR列のサイズを大きくすることで実際のパフォーマンスの懸念はありますか? 列幅が重要であることの証拠 The same goes for CHAR and VARCHAR data types. Don’t specify more characters in character columns that you need. http://www.sql-server-performance.com/2007/datatypes/ Length is a constraint on the data (like CHECK, FK, NULL etc) Performance …


5
SQL Serverリンクサーバーのパフォーマンス:リモートクエリがそれほど高価なのはなぜですか?
リンクサーバー経由で接続された2つのデータベースサーバーがあります。どちらもSQL Server 2008R2データベースであり、リンクサーバー接続は、現在のログインのセキュリティコンテキストを使用して、通常の「SQL Server」リンクを介して行われます。リンクされたサーバーは両方とも同じデータセンターにあるため、接続は問題になりません。 次のクエリを使用して、identifierローカルではなくリモートで使用可能な列の値を確認します。 SELECT identifier FROM LinkedServer.RemoteDb.schema.[TableName] EXCEPT SELECT DISTINCT identifier FROM LocalDb.schema.[TableName] 両方のテーブルには、列に非クラスター化インデックスがありますidentifier。ローカルは約260万行、リモートは54行のみです。しかし、クエリプランを見ると、実行時間の70%が「リモートクエリの実行」に費やされています。また、完全なクエリプランを調べる場合、推定ローカル行の数1は2695380(の後に来るクエリのみを選択した場合の推定行の数)の代わりになりますEXCEPT。 このクエリを実行すると、実際に時間がかかります。 不思議に思う:これはなぜですか?推定値は「ちょうど」外れていますか、それともリンクサーバーでのリモートクエリは本当にそれほど高価ですか?

2
EXPLAINコマンドの時間形式について-Postgres
特定のクエリでEXPLAIN ANALYZEコマンドを実行すると、出力された時間値の解釈が困難になります。たとえば(実際の時間= 8163.890..8163.893)。内部小数は繰り返し文字を表しますか?? 申し訳ありませんが、これは初心者向けの質問かもしれませんが、結果を正しく解釈していることを確認したいと思います。 -> GroupAggregate (cost=2928781.21..2929243.02 rows=1 width=27712) (actual time=8163.890..8163.893 rows=1 loops=1)

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