データベース管理者

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

4
SQL Server DBのパフォーマンスがハードウェアに制限されているかどうかを確認するにはどうすればよいですか?
現在シングルユーザーの負荷がかかっているアプリのテスト-テストデータが本番サイズ(テーブルあたり400k〜2M行)に増加したため、一部のSELECT spは十分に高速ではなくなりました(テストデータが限られているため、以前はそれぞれ30ミリ秒未満でしたが、現在は100〜200ミリ秒ですが、数ミリ秒あるため、UIで遅延が明らかになっています)。

3
大規模なSQL Serverデータベース設計の提案
MSSQL 2008 R2 Standardでデータベースを作成し、そこに多数のレコードを格納します。毎年1つのテーブルで2億件以上のレコードを見積もり、主にデータのUPDATEまたはDELETEをほとんど行わずにINSERTを実行しています。これは、履歴レコードを毎日挿入するデータアーカイブシステムです。ユーザーの要求に応じて、この履歴レコードに関するさまざまな種類のレポートを生成するため、いくつかの懸念があり、技術的な入力とアドバイスが必要です。 この種のアーカイブテーブルとデータベースを管理する最良の方法は何ですか?

4
一括データインポートの提案
現在、Excelスプレッドシートからデータをインポートする必要があるプロジェクトに取り組んでいます。データは事前​​に定義されたテンプレートからインポートされ、考えていることから、まず一時テーブルにデータをアップロードしてクリーニング操作を実行します(不要な情報の削除、親テーブルへの新しい行の追加、それらのFKの取得など)。 私が知っている必要があるのは、私たちの努力を減らすことができるツールやユーティリティがあることです。 さまざまなソース(主にExcelスプレッドシートから)から一括レコードを挿入する最良の方法は何ですか?

1
MySQLはまだこの方法でインデックスを処理しますか?
MySQLで重複したインデックスを削除するのにはかなり時間がかかりました。そのため、私が待っていたときにそれについて検索し、MySQLがどのように処理し、インデックスを作成するかについて話している2006年のこの投稿を見つけました。ADDDROP テーブルTが4つのインデックス(ndx1、ndx2、ndx3、ndx4)を持つMySQLテーブルであり、「テーブルTをドロップインデックスndx3に変更」したい場合。ここでは、内部で何が起こるかを正確に示します。 1)MySQLはT.MYDを一時テーブル、つまりS.MYDとゼロバイトのS.MYIにコピーします。2)MySQLは「テーブルSを変更し、インデックスndx1(...)を追加します。3)MySQLは「テーブルSを変更し、インデックスndx2(...); 4)MySQLはテーブルSを変更し、インデックスndx4(...)を追加します。5)MySQLはT.MYDを削除してT.MYIを削除します6)MySQLはS.MYDをT.MYDに名前変更し、S.MYIをT.MYIに名前変更します これはまだ本当ですか?彼のアドバイスはまだ有効ですか? 同じMyISAMテーブルTに4つのインデックス(ndx1、ndx2、ndx3、ndx4)があり、「テーブルTドロップインデックスndx3を変更する」とします。代わりにこれを試してください: 1)TのようなテーブルT1を作成します。これにより、ndx1、ndx2、ndx3、およびndx4のインデックスを持つ空のテーブルT1が作成されます。2)テーブルT1ドロップインデックスndx3を変更します。これにより、空であるT1のインデックスndx3が削除されます。3)T1に挿入* Tから選択します。これにより、テーブルTにデータが読み込まれ、T1の3つすべてのインデックスが1つのパスで読み込まれます。4)ドロップテーブルテーブルT; 5)テーブルT1の名前をTに変更します。 大きなテーブルでのインデックスの追加と削除をどのように処理しますか?

2
データベース編集時のMySQLからのメール警告
ルートまたは他の誰かが特定のデータベースを編集または更新したときに、MySQLからメールを取得するにはどうすればよいですか?メールの送信をトリガーし、編集内容をログに記録する必要があります。 トリガーを試しましたが機能しません。 サーバー仕様: Ubuntu 10.04 64ビット MySQLサーバー5.1.41 私が試したスクリプト #!/bin/sh tail -f /var/log/mysql/mysql.log | egrep 'INSERT|UPDATE|DELETE|root' | mail -s 'backend update' sushanth@example.com しかし、それは機能していません
8 mysql 

2
SQL Server 2005でのDBMailのトラブルシューティング
SQL Server 2005マシンで、DBMailをセットアップして正しく構成しました。「オペレーターに通知」とEXEC msdb.dbo.sp_send_dbmailを使用してメールをキューに入れることができます。 しかし、問題はキューに入れられたメールが通過しないことです。クエリを実行すると、キューに10通のメールが表示されます SELECT * FROM msdb.dbo.sysmail_unsentitems しかし、SQL Serverサービスを再起動すると、すべてのメールが通過し、受信トレイにメールが届きます。 これまでのところ、これが私が見つけた唯一のパターンです。 だから私の質問は:DBmailをトラブルシューティングする方法はありますか?MSDNでいくつかの手順を読みましたが、あまり役に立ちません。役立つ可能性のある記事へのURLは大歓迎です。

4
DBポリシーがセキュリティ監査に合格する必要があることを確認するために何をする必要がありますか?
私は近々監査を行っており、ERPシステムのデータベースを監査するときに監査人がどのような物理的、電子的、論理的なアクセス制御を探すのか疑問に思っていました。私はこのプロセスに本当に慣れていないので、どんなガイダンスもいただければ幸いです。

3
データベース設計のアドバイス
私は、営業チームが迅速なジョブ見積もりツールとして使用するデータベースを設計しています。デザインの特定の側面についてフィードバックをお願いします。 見積もりは基本的に、事前に定義された「アセンブリ」のリストを選択して、それぞれが合意された価格で作成されます。メインフォームの簡略表示は次のようになります。 +------------ --- ---+ | Assembly options | +------------+------------+----------+------------+---+---+---+ --- +--+ | assembly ▼ | unit cost | quantity | total cost | 1 | 2 | 3 | |50| +------------+------------+----------+------------+---+---+---+ --- +--+ | VSD55 | £10'000 | 2 | £25'500 | 1 | 1 | | | | …

1
単調に増加する値のためのSQL ServerのBツリーノード分割戦略
IDENTITY型の列など、常に単調に増加する値のBツリーインデックスについて考えます。従来のBツリーの実装では、ノードがいっぱいになると常に50%/ 50%に分割され、(ほとんど)すべてのノードが50%だけいっぱいになるBツリーになります。 私は、Oracleが値が増加し続けるときを発見し、そのような場合にOracleが90%/ 10%の分割を実行することを知っています。そうすれば、(ほぼ)すべてのノードが90%満たされ、これらの非常に一般的なケースではるかに優れたページ使用率が得られます。 SQL Serverの同様の機能に関するドキュメントを見つけることができませんでした。ただし、N個のランダムな整数とN個の連続した整数をそれぞれインデックスに挿入する2つの実験を実行しました。前者のケースは後者をはるかに多くのページを使用しました。 SQL Serverは同様の機能を提供しますか?もしそうなら、あなたは私にこの機能に関するいくつかのドキュメントを教えてもらえますか? 更新: 以下の実験では、リーフノードは分割されず、内部ノードは50%/ 50%に分割されているようです。これにより、増加するキーのBツリーは、ランダムキーよりもコンパクトになります。ただし、Oracleによる90%/ 10%アプローチはさらに優れており、実験で確認された動作を検証できる公式ドキュメントを探しています。

3
Postgres、MVCC、およびロック
次のような一連のSQLステートメントがあります。 BEGIN; SELECT counter FROM table WHERE id=X FOR UPDATE; REALLY COMPLEX QUERY; UPDATE table SET counter=Y WHERE id=X; END; 値を再計算している間、カウンターが読み取られないようにしたいのですが、Postgresのドキュメントによると、「行レベルのロックはデータのクエリに影響を与えません。それらは同じ行への書き込みのみをブロックします。」 質問: 読み取りを妨げない場合の「排他的」行ロックの意味は何ですか?他のトランザクションが共有ロックを取得するのを防ぐだけですか? SELECT ... FOR SHAREを使用して行を読み取ると、「排他的」ロックと同じ影響がありますか? テーブル/スキーマ/データベースのMVCCをオフにして、インプレース書き込みを許可することは可能ですか?

1
Oracleマテリアライズドビューの更新スケジュール
sysdate + 1のような式を指定できることがわかったので、ここに私の質問があります。 Oracleでマテリアライズドビューの更新の正確な時間を指定することは可能ですか? アプリケーションからデータベースを使用している人がいない間に、すべて午前2時に開始することは可能ですか?
8 oracle  view 

1
MySQLの高可用性、フェイルオーバー、およびレイテンシを伴うレプリケーション
MySQLで実行される新しいCMS(Drupal 6.x)の実装を進めています。プライマリとセカンダリの2つのデータセンターがあり、それらの間のレイテンシは既知です。MySQLのどのバージョンを実行するか不明です。コミュニティまたはエンタープライズのいずれかですが、それは未定です。InnoDBエンジンを実行するように見えます。OSはRedHat EL 5.5になります。セカンダリサーバーはパッシブまたはホットスタンバイですが、プライマリサーバーはアクティブになります。 MySQLのレプリケーション、高可用性、自動フェイルオーバーを2つのデータセンターに実装したいと考えています。 セカンダリサーバーへのフェールオーバー後、プライマリサーバーにフェールバックするとき、プライマリサーバーからコンテンツを引き続き提供できるように、セカンダリDBからプライマリDBにデータを迅速かつ完全に同期させたいと考えています。 これらの問題を解決/解決するために使用できるテクノロジー/ツール/ベストプラクティスを知ることに興味があります。また、落とし穴やああは瞬間も同様に高く評価されます。MySQLのレプリケーション、クラスタリング、TungstenやDolphinicsなどのサードパーティツールについては読んだことがありますが、どのようなアクションが最適かわかりません。 お時間をいただきありがとうございます! KM

1
リレーションは、大きくて非効率的なテーブルよりも遅いですか?
私の仕事では、「コンピューターの処理能力のために」最初の正規形(列全体でグループを繰り返す、空/ null値を使用)に何度も違反するように依頼されました。簡単に言えば、「学生」テーブルには、私の提案ではなく、少なくとも8つの空のフィールド(たとえば、telephones:telephone1、telephone2、telephone3 ...)が必要です。電話番号(およびその他のメタデータ)を保持する「telephone」テーブル外部キーは学生ID番号です。私の上司は、リレーションを使用する代わりに、「CPUサイクルが少なく、それがWebプラットフォームで問題になる」ため、それらをそのように保存する方が良いと述べています。最悪の場合、それはごくわずかです。 その例では、リレーションの使用(テーブルが中規模のWebアプリケーションの多くのレコードで満たされていると想定)は、そのようなテーブルスキーマを使用するよりも著しく遅いですか?

4
MySQLで複雑なGROUP BYを実行するにはどうすればよいですか?
他のテーブルへのいくつかのキーを含むテーブルがあります(各キーは複数の列で構成されています)。等しいキーを持つ行をグループ化したいのですが、それらすべてをグループ化したくありません。それは単純なGROUP BYキーではなく、たとえば10のグループを作成できるようにしたいのです。したがって、特定のキーが50回表示された場合、このグループ化(5グループの10)を実行すると5つの結果が得られます。また、このグループ化をキー内でランダムに発生させます。 私はこれを行う直接的な方法を知りませんでした、そして私が思いついたラウンドアバウト方式は私が思っているように機能していません。私が思いついたラウンドアバウト交差点の解決策は、値がそのキーiのith出現を(ただしランダムな順序で)表すような整数である各キーの新しい列を作成することでした。次に、整数の除算を行って、キー内のすべてのn(たとえば10)行が同じ値になるようにし、GROUP BYその値に対してa を行うことができます。 今説明したことを達成するためのより直接的な方法はありますか?これはかなり厄介で、新しいインデックス列を作成するときに問題が発生しました(この質問で説明したように)。 編集:まず、これはMySQL用であることに注意してください。目標が明確でない場合に備えて、例を追加します。MySQLのドキュメントはほとんどそこに到達する方法を示しています: CREATE TABLE animals ( grp ENUM('fish','mammal','bird') NOT NULL, id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (grp,id) ) ENGINE=MyISAM; INSERT INTO animals (grp,name) VALUES ('mammal','dog'),('mammal','cat'), ('bird','penguin'),('fish','lax'),('mammal','whale'), ('bird','ostrich'); SELECT * FROM animals ORDER BY grp,id; これは、私が望むものではありませんが、近くなるテーブルを作成します: +--------+----+---------+ | grp | id …

4
TSQL:大量のSQLコンパイルとSQL再コンパイルを個別に引き起こすクエリを見つける
パフォーマンスモニターカウンターに表示されるSQLコンパイルの高さ(再コンパイルではない)の原因を調べたい。 これが私の見解です:SQlコンパイルが大量に表示される場合は、次の理由により、システム上のクエリがキャッシュされていません。 多くのアドホッククエリ SQlがキャッシュしないクエリの実行: UPDATE table1 SET col1 = '8000文字より長い文字列.....' WHERE key_column = some int プランがタイムアウトして、キャッシュから削除されています。キャッシュのスペースが不足しているか、プランが十分に長く使用されていません。 プロファイラーでのキャッシュ挿入のキャプチャに近い唯一のことは、ストアドプロシージャ-> SP:CacheInsertsですが、ストアドプロシージャキャッシュの管理のみを行います。 だから私はアドホッククエリを取得するために以下を試しました: SELECT [cp].[refcounts] -- when Refcounts becomes 0, plan is excluded from cache. , [cp].[usecounts] , [cp].[objtype] , st.[dbid] , st.[objectid] , st.[text] , [qp].[query_plan] FROM sys.dm_exec_cached_plans cp CROSS APPLY sys.dm_exec_sql_text ( …

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