データベース管理者

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


4
OracleはSQL ServerよりもDBAにとってより厳しい環境ですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 6年前休業。 私はOracleをまったく知りませんが、Oracle DBAがOracleを(DBAとして)使用することは、SQL Serverを使用するよりも "難しく"困難で要求が厳しいと言っているのを聞いたことがあります。このステートメントには根拠がありますか?

5
PostgreSQLデータベースが最後に変更された日時を特定する
私はバックアップがどのように行われるかを変更することを検討しており、postgreqlクラスター内のどのデータベースが最近変更されていないかを判断する方法があるかどうか疑問に思っていますか? pg_dumpallを使用する代わりに、pg_dumpを使用して、最後のバックアップ以降に変更されたデータベースのみをダンプします(一部のデータベースは頻繁に更新されません)。変更がない場合、現在のバックアップは、まだ良い。 特定のデータベースが最後に更新/変更された時期を判別する方法を知っている人はいますか? ありがとう... 更新: 1つの特定のクラスターでのデータベースの作成(データベース内のdbオブジェクトの作成はもちろん)を制御できないため、場所全体にトリガーを記述する必要がないことを望んでいました。 さらに掘り下げてみると、$ PGDATA / global / pg_databaseファイルの内容(特に2番目のフィールド)と$ PGDATA / baseの下のディレクトリ名の間に相関関係があるようです。 実際、pg_databaseファイルの2番目のフィールドはデータベースoidであり、各データベースには$ PGDATA / baseの下に独自のサブディレクトリがある(サブディレクトリ名はoidである)と思います。あれは正しいですか?もしそうなら、バックアップを必要とするトリガーとして$ PGDATA / base / *の下のファイルからのファイルのタイムスタンプを使用することは理にかなっていますか? ...またはより良い方法はありますか? 再度、感謝します...

2
SQL Serverインスタンスでどのパフォーマンスカウンターを調べて、そのパフォーマンスとすべての正常性を判断できますか?
私はアイントホーフェンのFontys大学の学生です。現在、SQL Serverツールの開発を支援するために一連のインタビューを行っています。この分野の専門家からのフィードバックを希望しています。 私の質問の1つは: SQL Serverインスタンスでパフォーマンスと全体的な状態を判断するために、どのパフォーマンスカウンターを確認できますか? 特に、善が悪くなるときのしきい値に興味があります。 ジャミルヤングアイントホーフェンオランダ

3
MySQLで最近傍検索を実装するにはどうすればよいですか?
つまり、要するに 緯度と経度のデータ型は何ですか? たとえば、最初の100近くのレストランを取得するには、どのSQLコマンドを呼び出す必要がありますか? 詳細: 緯度と経度がそれぞれ10万件のビジネスレコードがあります。MySQLが実際にポイントと呼ばれるデータ型をサポートしていることがわかります。代わりに使用する必要がありますか? MySQLはKDTreeストレージシステムをサポートしますかhttp://en.wikipedia.org/wiki/File:KDTree-animation.gif 緯度と経度を格納するには、通常のfloatデータ型ではなくポイントデータ型を使用するのが最善ですか? 最終的には、たとえばポイント105,6に最も近い最初の100軒のレストランのようなものを見つけたいと思います。私のデータベースには、たくさんのビジネスとポイントが含まれています。明らかに、すべてのレコードとすべてのポイントの距離を1つずつ計算することはO(n)であり、それで問題があります。 私はYelpのようなアプリケーションはデータベースから距離情報を効率的に取得する方法で説明されているより簡単な解決策を知っており、最初に自分も実装することに注意してください。それは良い答えです。 しかし、私はそれを上回るはずの作物の答えの1つのクリームがあると思いますか?実際、緯度と経度に基づいて場所を保存し、それに最も近いものを見つけることは、mysqlに特別な設計パターンがあることを期待する非常に一般的な問題です。それはありますか? 詳細はどこで確認できますか?ありがとう。
10 mysql 

3
クエリの問題:自動列は1つしかありません
誰かがこのテーブル定義の何が問題になっているのか教えてください。 mysqlのバージョンは5.1.52-logです root@localhost spoolrdb> create table spoolqueue ( queue int, idx bigint not null auto_increment, status smallint, querystring varchar(2048), contenttype varchar(255), characterencoding varchar(16), body text, primary key(queue,idx) ); ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
10 mysql  query 

3
トランザクションログはSQL Serverで自動的に縮小されますか?
SQL ServerデータベースがSIMPLEモードの場合、トランザクションログのバックカップを気にする必要はありません。ただし、SIMPLEモードでは、FULLモードと同様にトランザクションログが大きくなるようです。ある時点で自動的に切り捨てられますか?それとも手動で切り詰める必要がありますか?

2
このテーブルを無損失で分解できますか?
私は自分のリーグではないデータベース設計の問題に出くわしました。そして、私の頼りになるDBAの第一人者が消防訓練に出かけています。 本質的に、私は次の主キー(簡潔にするためにPK)を持つテーブルを持っています。 child_id integer parent_id integer date datetime child_idそして、parent_idエンティティテーブルへの外部キーです。「子」テーブル自体にも「親」テーブルへの外部キーが含まれています。loはそれぞれ、child_id常にparent_id上記のテーブルで想定されているものと同じものを参照します。実際、この2つを同期させるための追加のコードがあることがわかります。 これにより、この熱狂的な正規化の初心者は「代わりに冗長性を削除する必要があります!」と言います。 私は次のように分解します。 Table_1 PK: child_id integer date datetime Table_2 PK: parent_id integer date datetime Table_3: (already exists) child_id integer PRIMARY KEY parent_id integer FOREIGN KEY そして、これらの人たちを自然な方法で結合すると、元のテーブルが回復します。この5NFを作ったのは私の理解です。 しかし、今ではビジネスルールが隠されていることに気づきました。 通常、特定child_idのに関連付けられている日付は、対応するに関連付けられている日付のサブセットである必要がありますparent_id。最初のテーブルがこのルールを適用していることがわかります。 日付が大きくなりすぎるまで自由に表1に追加できるため、私の分解ではルールを適用しません。 これは私をここに導き、次の質問があります: この分解は5NFですか?私はそれが挿入異常を許可すると言うだろうが、また次のそれ自体、Wikiの例に従うように見えるこのガイドを。「私が強調したもの」というフレーズは、「3つの別個のレコードタイプからなる正規化された形式からすべての真の事実を再構築できる」という特別な休止を与えますTable_1。 この分解が気に入らないとしましょう(気に入らない)。テーブルとコードをそのままにしておくことが実際的な解決策であることを私は自由に認めます。しかし、理論的には、最初のテーブルから離れてビジネスルールを保持するように制約を分解または追加する方法はありますか?

1
SQL Server 2008R2での統計の自動更新:多数の行の挿入にもかかわらず、一部の統計が古くなっているのはなぜですか?
遅いクエリの調査中に、実行プランが非常に最適ではないように見えました(推定実行回数が1であるシークの900万回の実行をネストしたループ)。実際に古くなっているいくつかの関連する統計を確認したので、統計を再構築し、パフォーマンスの問題が効果的に解決されました。 このデータベースでは、統計の自動更新が有効になっています(デフォルトでオン)。20%+ 500行の変更(更新/挿入/削除)に基づく自動統計更新のしきい値があることを理解しています。このしきい値は、複数のインデックスで大幅に超えているようです。そのため、(A)自動更新に問題があるか、(B)オンラインで見つけた以上の更新方法があります。ドキュメンテーション。 統計を更新するようにスケジュールされたタスクを設定できることを感謝します。これは他の解決策が見つからない場合に採用するアプローチである可能性が高いですが、そのような大量の変更によってトリガーされない理由について混乱します一部の統計情報の自動更新-スケジュールされたタスクで更新する必要がある統計情報を判断するのに役立つ理由を理解する。 追加のメモ: 1)この問題は、負荷テストによってデータが作成されており、大量のデータが短時間で追加されるデータベースで指摘されたため、自動更新が定期的に(たとえば、1日に1回)発生した場合ほとんどの場合、これにより、観察された動作の一部が説明される場合があります。また、負荷テストはデータベースに大きな負荷をかける傾向があるため、負荷が高いときにSQLが統計の更新を延期しているのでしょうか(その後、何らかの理由で統計が更新されていません)。 2)連続するINSERT、SELECT、およびDELETEステートメントを含むテストスクリプトでこの問題を再現しようとすると、問題は発生しませんでした。ここでの違いは、これらのステートメントがそれぞれSQLステートメントごとの多くの行に影響を与えるのかどうか疑問に思っていますが、負荷テストスクリプトは行を個別に挿入する傾向があります。 3)問題のDBは、「単純」復旧モデルに設定されています。 いくつかの関連リンク: 実行時間の遅いクエリを分析するためのチェックリスト 統計を使用してクエリのパフォーマンスを向上させる 私はマイクロソフトコネクトを介してこの問題を提起しました: 統計の自動更新:多くの統計が古くなっています 2011年6月30日更新: さらなる調査では、しきい値レベル(たとえば、500行+ 20%)を超えて古くなっている統計は、問題のあるクエリで使用されていない統計であるため、クエリを実行すると更新される可能性がありますそれらを必要とします。クエリで使用される統計情報は、定期的に更新されています。残りの問題は、比較的少数の挿入(たとえば、推定数が1だった場合に前述の900万個程度のシークを引き起こす)の後で、これらの統計がクエリプランオプティマイザーに著しく誤解を与えることです。 この時点で私の問題は、問題は主キーの選択の不備に関連していることです。キーはNEWID()を使用して作成された一意の識別子であり、これにより非常に迅速にフラグメント化されたインデックスが作成されます-特にSQLのデフォルトのフィルファクターとしてサーバーは100%です。私の直感は、比較的少ない行の挿入後、どういうわけか統計の誤解を招く結果になり、統計を再計算するためのしきい値を下回ることです。インデックスを途中で再構築せずに大量のデータを生成したので、これはおそらく問題ではない可能性があります。したがって、不十分な統計は、結果として生じる非常に高いインデックスの断片化の結果である可能性があります。SQL Serverのメンテナンスサイクルを負荷テストに追加して、長期間にわたる実際のシステムのパフォーマンスをよりよく理解する必要があると思います。 更新2012-01-10: 考慮すべきもう1つの要素。SQL Server 2005に2つのトレースフラグが追加され(2008年にも引き続き存在するようです)、古い統計情報や誤解を招く統計情報の発生に関連する特定の欠点に対処します。問題のフラグは次のとおりです。 DBCC TRACEON(2389) DBCC TRACEON(2390) MSDN:Ian JoseのWebLog:昇順のキーと 昇順の列での自動クイック修正統計統計、Fabiano Amorim これらのフラグが有害な影響を与える可能性があるため、これらのフラグを有効にすることを決定するときはもちろん、非常に注意する必要があります。


2
MySQL 5.1 InnoDB構成/ 24GB RAM-bi-xeon高負荷
現在300〜600人の同時ユーザーがいる(そして成長している)Facebookアプリを実行しています。ハードウェアを成長させる準備をするために、i7 / 12GB RAM / 2x 80GB Intel X25 SSD(Debian 5.0 / MySQL 5.0 / 64bit)をBi-Xeon / 24GB RAM / 2X 120GB Intel Intel ssd(UBUNTU 10.10 / MySQL 5.1 /)に変更しました64ビット)。 今、私はパフォーマンスが「小さい箱」よりも悪いという問題に直面しています。両方のサーバーで、コンテンツを提供するためにnginx / php fcgiを使用しています。 私はinnodbのみを使用しており、読み取り/書き込みは約65%/ 35%です。約800-1000 qpsですが、すべてのクエリは単純で、2つ以上の追加テーブルに参加することはありません。すべてのインデックスが設定され、個別のクエリは低速ログ(> 2秒)に記録されません。現時点では、毎月2倍になると予想している約400MBのデータ(インデックス付きで約1GB)があります。 私はそれをよりスムーズに実行するために何を変えるべきかについてのヒントを私に与えることができる皆を崇拝します。 i7ボックスの古い構成はこのようなもので(myisamとinnodbの混合)、800以上のユーザーまではかなり良好に機能しました。 古いmy.cnf key_buffer = 3000M max_allowed_packet = 128M thread_stack = 192K …

2
マテリアライズドビューの完全更新または手動での同等操作のやり直しを制限する
マテリアライズドビュー(MV)ログを使用すると、MVは、変更されたデータのみを変更する高速リフレッシュを実行できます。ただし、さまざまな条件により、MVはログを使用できないため、完全な更新が必要です。Oracleは、すべてのレコードの削除と挿入として、アトミック完全リフレッシュを実装しました。最終的にデータに変更がない場合でも、これを行います。 このレプリケーションをREDO生成に関してインテリジェントにする方法はありますか?MERGEに続いてDELETEを実行するには、ソースを2回クエリする必要があります。BULK MERGEおよびDELETEを実行するためにデータを一括収集することは価値がありますか?もっと良い方法はありますか? 更新: グローバル一時テーブルをステージング領域として使用することを検討しました。使用するREDOは半分未満ですが、それでも多くを使用しています。

3
データベースを安全に完全に削除するためのベストプラクティスは何ですか?
私たちは「有機的な」環境を持っています。つまり、人々は最小限の監視またはドキュメント化でコードにコードを10年間積み上げてきました。私が使用しているサーバーには、もう使用されていないと思われるいくつかのデータベースがあります。それらを削除して、実際に使用している3つだけを残したいです。 無謀な極端では、これらのデータベースを無効にして、誰かが悲鳴を上げるのを待つことができました。もう一方では、「念のため」、それらを永久に実行したままにすることができます。サーバーが使用されているかどうか、およびその方法を特定する上で、どのような手順が重要であると思いましたか? また、システムを無効にすることで前進するときに、一定期間便利に元に戻せるようにするためにどのような手順を推奨しますか(オブジェクトを完全に削除するのではなく、名前を変更するなど)? ありがとう!

4
MySQL:auto_incrementが主キーだけに制限されているのはなぜですか?
MySQLがauto_incrementカラムを主キーに制限していることを知っています。どうしてこれなの?私の最初の考えは、この値を取得するためにロックする必要があるカウンターテーブルがどこかにある可能性があるため、これはパフォーマンスの制限だということです。 同じテーブルに複数のauto_increment列を含めることができないのはなぜですか? ありがとう。

2
そのフィールドに複数列のインデックスが既に存在する場合、テーブルに新しい単一列のインデックスを追加する必要がありますか?
とに複数列のUNIQUEインデックスを持つテーブルが_job_id__あり__keyword_id__ます。 その列__job_id__に対してクエリを頻繁に実行する場合、別のインデックスを追加する必要もありGROUP BYますか? (1億行になると、しばらく時間がかかることがあります。これが、単に実行する代わりに求めている理由です)
10 mysql  index 

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