データベース管理者

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

4
SQL Server 2008 R2でSQL Serverステートメントが断続的に遅くなる
あるお客様では、アプリケーションのパフォーマンスに問題があります。SQL Serverデータベースのデータを消費および更新する.NET 3.5 Webアプリです。現在、本番環境は、フロントエンドとしてのWindows 2008 R2マシンと、バックエンド上のSQL Server 2008 R2クラスターで構成されています。このアプリは、COM +とMSDTCを使用してデータベースに接続します。 ここで何が起こっているのか:エンドユーザーは、アプリケーションの速度が遅いと不満を言うことがあります。一部のページは、予想よりもロードに時間がかかります。何が起こっているのかを理解しようと試みているうちに、パフォーマンスの低下の原因となる可能性のあるデータベース側での奇妙な動作を見つけることができました。予想されることを実行するのにより多くの時間がかかるSQLステートメントが時々あることに気付きました。プロファイラートレース(TSQL_Durationテンプレートを使用)を使用して実行時間の長いクエリを特定し、これらのステートメント(主にアプリケーションのストアドプロシージャの呼び出し)の一部を特定しました。 問題は、これらのストアドプロシージャをSQL Management Studioのデータベースで直接実行すると、時間がかかる(約7/8秒)こともあれば、高速(1秒未満)になることもあります。SQLマシン(4コア、32 GB)が他のアプリケーションで使用されておらず、これらのクエリの実行にこれほど時間がかからないため、これがなぜ起こるのかわかりません。 DBAやSQL Serverの第一人者ではない私は、問題を理解するのに役立つかもしれないものを調べようとしてきました。以下は、問題を解決しようとするためにとったステップと、これまでに発見したことです。 アプリケーションによって呼び出されるすべてのTSQLコードは、ストアドプロシージャで記述されます。 SQL Serverプロファイラーで長時間実行されるクエリの一部を特定しましたが、Management Studioで実行すると、実行に時間がかかる(4〜10秒)か、迅速に実行(1秒未満)します。パラメーターに渡された同じデータを使用して、まったく同じクエリを実行しています。これらのクエリは、主に選択ステートメントを含むストアドプロシージャです。 待機およびキューの統計を調べて、いくつかのリソースで待機しているプロセスがあるかどうかを確認しようとしました。次のクエリを実行しました。 WITH Waits AS (SELECT wait_type, wait_time_ms / 1000.0 AS WaitS, (wait_time_ms - signal_wait_time_ms) / 1000.0 AS ResourceS, signal_wait_time_ms / 1000.0 AS SignalS, waiting_tasks_count AS WaitCount, 100.0 * wait_time_ms …

2
大きなSQL Serverデータベースのトリミング
大規模なSQL Server 2008テストデータベース(1.9 TB)があり、ディスク上のサイズを縮小したい。未使用のテーブルを削除し、大量のデータをパージしましたが、ディスク上のサイズは減少しません。私は何をすべきか? SSMSのShrinkタスクを見てきましたが、オプションは戸惑っています。データベースまたはファイルを縮小しますか?そして、どのようなオプションがありますか?
13 sql-server 

3
MySQLログをsyslogに出力するにはどうすればよいですか?
Ubuntu(10.04 LTS)でMySQL(5.1.41)のログにsyslogを使用したい。エラーログをsyslogに出力する情報を見つけました。 [mysqld_safe] syslog しかし、一般的なログとスロークエリログを記録するためにsyslogを使用したいと思います。設定ファイルの書き方を教えてください。 リファレンスマニュアルでその方法を見つけることができませんでした。 http://dev.mysql.com/doc/refman/5.1/en/log-destinations.html
13 mysql  logs 


4
集中DBAデータベースの作成
200以上のサーバーがあり、バックアップ、エラー、スペースジョブをログに記録し、SSRSでレポートを生成する集中DBAデータベースを作成することを考えています。どこから始めればよいかわかりませんが、あなたの助けに感謝します。どうもありがとうございました。

6
Oracle SQLクエリで増分番号を作成する
テーブルを作成せずにOracle SQLクエリで増分番号を作成する方法は?「with」句を使用してみましたが、期待した結果が得られませんでした。Oracle 10gを使用しています ここに私が試したコードがありますが、動作していないようです: WITH TABLE3 AS ( SELECT 2008 YEARS FROM dual WHERE 1=1 union all select t3.YEARS+1 from TABLE3 t3 WHERE 1=1 AND t3.YEARS < 2011 ) select YEARS from TABLE3 私が望む期待される結果は: 2008 2009 2010 2011
13 oracle-10g 

3
SQL Serverのパフォーマンスの突然の低下
最近、予測不能になったSQL Server 2005があり、その理由について頭を悩ませています。数秒で実行されるクエリは、計画を変更し、数分かかります(フルテーブルスキャンまたはインデックススプールに時間がかかります)。最初の最も明白なことは、統計が古くなってオプティマイザーが混乱することですが、これはそうではないと確信しています-まず、基礎となるデータが大きく変化していないためです2番目に、統計の自動作成と統計の自動更新が両方とも真であるためです。ただし、オプティマイザーは混乱しています。チューニングアドバイザーでSQLを実行CREATE STATISTICSすると、(次のSQLが誤動作するまで)修正しているように見える複数列のステートメントが多数得られます。 これを根本原因とするアプローチに使用できる戦略のアイデアはありますか?「通常の」統計だけでは不十分な理由はありますか?

5
Oracleのどの機能が、小規模なプロジェクトにとって魅力的な選択肢ですか?
Oracleのライセンス処理[a](および、程度は低いもののコスト)を考えると、PostgreSQLまたはMySQLよりもOracleを選択する決定要因は何かと常に疑問に思っていました。 私の会社は、ほとんどの場合、専用のDB管理なしでデータベースを実行する単純なWindowsサーバーボックスが1つしかない小規模プロジェクトでも、Oracle(可能な場合はXE)を選択しています。(小さいとは、データが常にOracle XEのかなり小さいサイズの制約に適合することを意味しないことに注意してください。) 私は常にこの選択に疑問を呈してきましたが、少なくとも1つのデータベース製品にしかさらされないという利点があります。 それでも、RDBMSが必要な新しいプロジェクトを考えますが、データベースのプロジェクトと範囲は非常に小さく、単純なWindowsサーバーボックスで実行されるOracleの独自の機能に基づいて(専用の管理はあまり行いません)別のRDBMS? 追加のコンテキスト:データベースの展開の多くは、顧客サイトで「低管理」モードで実行できます。つまり、データベースは一度セットアップされます。サイトでの正しい動作とパフォーマンスに関する初期テストがいくつかあります。この後、データベースは実行されます。定期的な管理は行われていません。何かが壊れている場合にのみ、(専門のDBAではなく)技術者がデータベースをチェックし、何が起きているのかを把握しようとします。バックアップは主にオフラインバックアップとして行われます。一部のプロジェクトでは、顧客はRDBMSが関係していることすら気にしません。彼らは、自分のアプリを機能する(または機能しない)ブラックボックスと見なしています。 [a]:私が仕事をしているところ、収益が少ない場合、地元のOracleの代表者は製品の販売にあまり関心がないので、数名のプロジェクトマネージャーが小規模プロジェクトの適切なライセンスを取得するのに数か月かかりました。


5
データベース(DDLおよびDML)への変更を検出する方法
クライアントのSQLサーバーには多くのデータベースがあります。これらのデータベースは開発中であるため、開発者は設計、リファクタリング、データ変更などを行うことができます。ほとんど変更されないデータベースがいくつかあります。私のクライアントは、それらすべてを安全に(バックアップして)保持し、環境の管理に時間を費やさなければなりません。(会社にはDB管理者の立場はありません。)長い議論の末、クライアントは復元が容易なため、毎日の完全バックアップ戦略を使用することにしました。 状況の概要は次のとおりです。 データベースの数は毎日異なります。 変更されたデータベース(データや構造が変更されたことを意味します)はバックアップされます。 変更されていないデータベースはバックアップされません。 ソリューションはデータベース構造に影響を与えません(要件に制限はありません) この「バックアップエンジン」は自動的に機能します。 主な問題:データベースが変更されたことを検出する方法。問題の最初の部分(DDLの変更)は、DDLトリガーを使用して解決できます。ただし、データの変更(DMLの変更)は問題です。DMLトリガーをすべてのデータベースのすべてのテーブルに適用して、変更(パフォーマンス、拡張オブジェクトの管理など)を追跡することはできません。バックアップエンジンは、すべての変更を追跡して、各データベースをバックアップ準備完了としてマークする必要があります。 変更データキャプチャはソリューションですが、重すぎるようです(SQL Server Enterprise Editionも必要です)。 別の方法は、データベースファイルの変更(サイズまたは最終変更時刻)を追跡することですが、正しく機能しません。データベースは、予約されたすべての空き領域を超えたときにサイズを変更でき、sp_spaceusedは解決策ではありません。 トレースは解決策ですが、パフォーマンスの問題を引き起こし、追加の管理が必要です。 他のデータベース管理オブジェクト(統計など)に影響を与えずに、実際のデータベース使用量を計算するソリューションはありますか?テーブルのサイズを変更しないテーブルのデータへの変更はトリガーされないことを認めました(私は思う)が、それは何もないよりはましです。本当にSQL Server 2008の直接または間接的なソリューションを探しています。 コメント、解決策、考えをお寄せいただきありがとうございます。 追加: ソリューションは次のとおりです(Marianに感謝)。 Select NextLSN = MAX(fn.[Current LSN]) ,Databasename = DB_NAME() from fn_dblog(NULL, NULL) fn LEFT JOIN sys.allocation_units au ON fn.AllocUnitId = au.allocation_unit_id LEFT JOIN sys.partitions p ON p.partition_id = au.container_id LEFT JOIN …

4
リモートデータベース用のSQL Server Management Studio
リモートホストの専用サーバーにあるSQL Severデータベースを使用すると、同じサーバーまたはローカルコンピューターにインストールされたSQL Server Management Studioを使用して作業できます。私は最初にリモートデスクトップを使用して作業する必要があり、これにより作業が少し遅くなります。2番目のケースでは、サーバーのファイアウォールで追加のポートを開く必要がありますが、ユーザーエクスペリエンスはより快適になります。 これら2つの推奨プラクティスは何ですか?
13 sql-server  ssms 

4
MongoDBの運用/管理に関する優れたリソース
MongoDBを操作および管理する方法を学ぶための最良のリソースは何ですか? それに対する開発には多くのリソースがあります-開発能力が十分にあり、実際にそのノイズを除去する必要がある場合、実際に問題が発生します。まだDBAを雇う余裕のない開発者のために、Mongoクラスターの安定性、パフォーマンスなどを適度に維持する必要があります。フォローする良いブログなど?
13 mongodb 

4
合計に対する行の割合の計算
悪いタイトルをおologiesび申し上げますが、これに適したタイトルになるかどうかはわかりませんでした。 これは現在(の簡略化されたビュー)私が作業しているデータです Agent | Commission ---------|------------ Smith | 100 Neo | 200 Morpheus | 300 各エージェントが担当するコミッション合計の割合を計算する必要があります。 したがって、エージェントスミスの場合、パーセンテージは次のように計算されます。 (Agent Smith's commission / Sum(commission)*100 だから、私の予想されるデータは Agent | Commission | % Commission ---------|---------------|--------------- Smith | 100 | 17 Neo | 200 | 33 Morpheus | 300 | 50 各エージェントのコミッションを返す機能があります。パーセンテージを返す別の関数があります(Commission/Sum(Commission))*100。問題は、Sum(commission)各行ごとに計算され、このクエリがデータウェアハウスで実行されることを考えると、データセットがかなり大きくなり(現在、2000レコードをわずかに下回っている)、正直なところ、悪いアプローチ(IMO )。 Sum(Commission)フェッチされるすべての行に対して計算しないようにする方法はありますか? 私は2つの部分のクエリの行で何かを考えていました。最初の部分はsum(commission)パッケージ変数/タイプにフェッチし、2番目の部分はこの事前に計算された値を参照しますが、これをどのように達成できるかわかりません。 SQLの使用に制限されており、Oracle …

5
同じ物理サーバーでレプリケーションを実行するのは賢明ではありませんか?
データベースのマスタースレーブレプリケーションのセットアップを検討しています。スレーブサーバーは冗長性のために使用され、場合によってはレポートサーバーとして使用されます。しかし、私が直面している最大の問題の1つは、データセンターのパワーがすでに限界に達していることです。そのため、別の物理サーバーを追加することはオプションではありません。 既存のデータベースサーバーは、CPUに関しては十分に活用されていません(クアッドコアで平均負荷が1を超えることはありません)。そのため、主要なアイデアは、いくつかの新しいドライブをトスし、メモリを2倍(8GBから16)にして、同じ物理マシンで2番目のmysqlインスタンスを実行することです。各インスタンスには、データベース用に個別のディスクがあります。 この考えに何か問題はありますか? 編集(詳細):私は(幸運にも)サーバーを停止するほど悪いことは一度もありませんでしたが、前もって計画しようとしています。もちろん、夜間にバックアップを作成して、そこから回復できます。ただし、マスターサーバーのドライブに障害が発生した場合(マシン全体が停止した場合は明らかにそうではない)、冗長データを別のディスクに保存すると、より迅速なソリューションが得られると考えました。 レポートの側面に関しては、レポートするテーブルはすべてMyIsamです。そのため、書き込み中の同じテーブルで高価な読み取りを行うと、サーバーが動かなくなる可能性があります。私の想定では、CPU負荷がまだ問題になっていないため、十分なRAMを投入する限り、スレーブサーバーがメインサーバーに影響を及ぼさないと報告していました。

2
新しいインスタンスをインストールせずにMS SQL 2005でインスタンス名を変更するにはどうすればよいですか?
インスタンスが実際には何もありません。単にインストールされているだけです(1つのプロジェクトを対象としていますが、このサーバーでは実際に行われず、プロジェクトは別のサーバーで重複して行われました)。名前を変更したいです。 これはできますか?どうすればいいですか? さらなる調査(グーグル)では、実際には不可能であると言われています。同僚との追加相談により、2k8インスタンスをインストールして先に進むこともできます。

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