データベース管理者

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

4
SQL ServerのプログラムによるETLの標準言語/インターフェイスはありますか?
現在、データウェアハウス用のETLを作成しています。SSIS 2008を使用していますが、問題が発生しています。最大の問題は、コンポーネントの再利用の難しさです。テーブルごとに個別のパッケージがあり、各パッケージは親パッケージからいくつかの変数を入力として受け取ります。これらの入力変数に変更を加えるときは、各パッケージ(15ほどありますが、この数は大幅に増える予定です)に移動し、パッケージを変更してそれらの変更に対処する必要があります。他の問題もあります。たとえば、抽出のために任意のSQLを実行できない、ログ機能が不十分などです。 このプロセス全体は、コードでETLを開発し、コードの再利用、共通ライブラリ、より優れた単体テストなどを可能にする方法があれば、はるかに堅牢になります。SQLServerの事実上の標準ETL言語/ APIはありますか?GUIツールはできるだけ避けたいです。 編集:私は自分の経歴について述べるべきです。私はDBAではなく、正式な(または非公式の)DBAトレーニングを受けていません。基本的に、私はこれを理解していて、SSISで不適切なことを試みたり、このETLに近づいたりする可能性があります間違った角度から投影します。また、私は現在州政府で雇用されているため、新しいソフトウェアパッケージの購入を必要とするソリューションは、可能性の範囲内にありません。 これが私たちのタスクの1つです。単一のSSISパッケージを使用して、ウェアハウスの各テーブルをロードしています。各ファクトパッケージとディメンションパッケージは一般的に同じですが、 ソースデータベースからの抽出 データフローでの操作 宛先テーブルにマージします できること(SSISで実行するのが難しいと感じていること) テキストファイルから抽出クエリを読み込みます。開発者が抽出クエリを作成してテストする場合、SSISで実行する前にクエリを操作する必要はなく、クエリを切り取ってDBソースオブジェクトに貼り付ける必要もありません。 各コンポーネントを個別にテストします。他のテーブルのロードとは無関係に、個々のテーブルの完全なETLプロセスを分離してテストできるはずです。 1つの場所で共有ロジックを変更します。個々のパッケージを編集する必要はありません。すべてのパッケージが同じ方法でデータを監査テーブルにロードします。監査されてロードされたデータを変更したい場合、15個すべてのパッケージを編集する必要はありません(この数は時間とともにかなり大きくなります)。 プロセス全体は、共有コードを適切に使用してプログラム的に行うと、実装がはるかに簡単になり、より堅牢になると感じています。
10 sql-server  etl 


4
大きなテーブルでの結合の最適化
2億5000万件のレコードを持つテーブルにアクセスしているクエリからさらにパフォーマンスを引き出そうとしています。実際の(推定ではない)実行プランを読んだところ、最初のボトルネックは次のようなクエリです。 select b.stuff, a.added, a.value from dbo.hugetable a inner join #smalltable b on a.fk = b.pk where a.added between @start and @end; 関連するテーブルとインデックスの定義については、下を参照してください。 実行計画は、ネストされたループが#smalltableで使用されていること、およびhugetableに対するインデックススキャンが480回(#smalltableの各行に対して)実行されていることを示しています。これは私には逆に思えるので、代わりにマージ結合を使用するように強制しようとしました: select b.stuff, a.added, a.value from dbo.hugetable a with(index = ix_hugetable) inner merge join #smalltable b with(index(1)) on a.fk = b.pk where a.added between @start and @end; …

4
SQL Serverで長時間実行されるクエリを監視する最良の方法は何ですか?
データベースに対して、かなり長時間実行されるクエリ(インデックスの再構築、大量のデータセットの更新)を実行する必要があります。SQL Server Management Studioでクエリを実行し、1時間ごとにクエリをチェックする方法はありますか?完了したらメールまたはメッセージを送信したいのですが、これに最適なツールがわかりません。

3
フィールドを一意にすると、インデックスが作成されますか?
uniqueフィールドに制約を課す場合、スケーラブルな挿入時間を得るために、そのフィールドにインデックスを作成する必要もありますか?または、これは私のために行われますか? 具体的には、私はプロトタイピングのためにApache Derbyを使用していますが、おそらく近い将来にMySQLに移行する予定です。また、SQL標準にこれについて何かを述べている何かがあるといいのですが。 このフィールドで検索する必要がないので、役に立たないインデックスを作成したくありません。しかし、私はO(n)挿入時間よりも役に立たないインデックスが欲しいです。

3
データベースの多次元インデックス
実際の多次元インデックスを使用しているデータベースはどれですか?オラクルはテーブルからデータを取得するためにいくつかのインデックスを使用しますか、それとも常に選択性が最も高いと思われるインデックスを使用しますか?他のdbmsはどうですか?
10 index 


4
mysqldumpコマンドは、バックアップされたデータベースをどこに保存しますか?
mysqldumpコマンドを使用してUbuntuのターミナルからデータベースをバックアップしようとしていますが、成功しました。バックアップされたデータベースはどこに配置されますか? 私はこのようにコマンドを実行します: $ mysqldump -h localhost -u username - p database_name > back_up_db.sql どこback_up_db.sqlに保存されているのかわかりません。
10 mysqldump  ubuntu 

1
TDEによるデータベースミラーリング
いくつかのデータベースをミラーリングし、透過的なデータ暗号化(TDE)を使用する必要があります。データは「休止」状態で暗号化する必要があるためです。 プリンシパルとミラーの両方にTDEをセットアップしました。2つのデータベースのミラーリングを設定しているときに問題が発生します。TDEを使​​用しているため、GUIを介してミラーリングをセットアップする方法がわからないため、t-sqlを使用してジョブを実行する必要があります。 以下は、ミラーサーバーで使用したコードです --Restore the full backup to the mirrored mdf and ldf OPEN MASTER KEY DECRYPTION BY PASSWORD = '1Password' RESTORE DATABASE TDE FROM disk = '\\SERVERNAME\SQL_Stuff\Backup\TDE_FULL.bak' WITH NORECOVERY, REPLACE, MOVE 'TDE' TO 'E:\TDE.mdf', REPLACE, MOVE 'TDE_log' TO 'G:\TDE.ldf' CLOSE MASTER KEY GO --Restore the log backup to the …

2
原因不明のInnoDBタイムアウト
最近、いくつかの非常に基本的な更新がタイムアウトし、原因を特定できませんでした。例: //#Query_time:51 Lock_time:0 Rows_sent:0 Rows_examined:0 UPDATE photos SET position = position + 1 WHERE (photo_album_id = 40470); 同じログには、Lock_time> 0のエントリはありshow innodb statusません。実行しても、関連するロックは明らかになりません。この問題は、私のアプリケーションサーバーログ(Mysql::Error: Lock wait timeout exceededmysql-slowログの対応する各エントリに関連するエラーを示す)に基づいて、少なくとも5つの異なるテーブルに影響しているようです。 ここからどこへ行くべきかについてのアイデアはありますか?私はあらゆる方向に行き止まりを打っています。ありがとう。 編集: CREATE TABLE `写真`( `id` int(11)NOT NULL auto_increment、 `type` varchar(255)NOT NULL、 `photo_album_id` int(11)NOT NULL、 `user_id` int(11)NOT NULL、 `title` varchar(255)default 'Untitled'、 「説明」テキスト、 `credit` varchar(255)デフォルトはNULL、 `photo_file_name` …


4
時間ディメンションテーブルのどこにインデックスを配置すればよいですか?
インデックスについてこのウェブサイトからの質疑応答を読んだ後、疑問が浮かびました。 もし、1日がより細かいレベルの時間ディメンションテーブルを使用しているとしたらどうでしょう。インデックスはどこに置くべきですか? 質問のランディ・メルダー:RDBMSで「インデックス」とはどういう意味ですか?言った: インデックスを「目次」と考えてください...これは、ファイル内の位置へのポインタ、つまりオフセットの順序付きリストです 時間ディメンションの場合、ほとんどのデータ調査は特定の日、特定の週、特定の月、または特定の年のすべての日がタイムテーブルに保存されている場合は特定の四半期に対して行われる可能性があります。 私の質問は、これらすべてのフィールドにインデックスを設定する必要がありますか? 日は一意であると想定されているため、この日についてはインデックスの使用を完全に理解しています。ただし、週IDには7回、月IDには30/31回、四半期IDには120回程度の発生があります。 それらのフィールドにインデックスを付ける必要がありますか? それはまだ役に立ちますか? 同じ質問で、David Spillettが言ったので、私はあなたに尋ねます: インデックスを追加することは、もちろん最適化の悪い結果になる可能性があります。インデックスを格納するために使用される余分なスペース(および、DBが多数の書き込み操作を確認した場合にインデックスを維持するためのIO負荷)は、わずかに最適化されていない読み取りクエリよりも悪い問題である可能性があるためです。 、無理しないでください。 それでは、時間ディメンションの場合の最良の考慮事項は何でしょうか?



6
SAアカウントおよびその他の既知のアカウント名がセキュリティにもたらすセキュリティ上の脅威は何ですか?
saなどの既知のアカウント名は、データベースにセキュリティ上の脅威をもたらしますか?SQL ServerでWindows認証を使用する場合、同じパスワードポリシーが適用されますか(5回後にアカウントロックアウトを行うように設定されている場合)?

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