データベース管理者

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

2
SQL ServerメモリとSQL Server Analysis Servicesメモリのバランスをとる方法
同じ構成のシステムが多数あります 1つのサーバー(仮想または物理) SQL Server(SQL)およびSQL Server Analysis Server(AS)の実行 マルチコア 16GB RAM SQL Serverは毎晩約2〜3時間の処理を実行し、その後 2〜3時間のAS処理を実行します。次に、終日ASのみが照会されます。 これが専用サーバーであり、他のアプリが問題ではなく、2つの処理セットが完全に同期している-常に次々と重複しない-とすれば、SQLおよびASサーバーのメモリ制限を最適に設定するにはどうすればよいですか。 質問の理由は、SQLの制限を設定しないと、可能なすべてのメモリを取得するからです。ただし、私の理解では、SQLは次の場合にこのメモリを喜んで放棄します。 それを使用していないと 別のサービス/プログラムが要求します。 したがって、論理的な観点からは、SQLに必要なだけの量を割り当てることができると思いますが、ASについてはよくわかりませんTotalMemoryLimit。ASがメモリを放棄するかどうかはわかりません。実際、もっと多くを読むと、それをすべて取り入れることは間違っていると私は信じるようになります。 これは実際に両方に制限を設定する必要があることを意味しますか?ベストプラクティスとは何か、プロセスが重複しないことを考慮して測定する必要があるものについて、私は混乱しています。 これが理にかなっているといいのですが。

1
トリガーで変更テーブルエラーが発生しないのはなぜですか?
トリガー内の変更テーブルでDMLステートメントを使用できないことはわかっています(または少なくとも知っていました)。Oracleのドキュメントからの抜粋: 変更テーブルは、UPDATE、DELETE、またはINSERTステートメントによって変更されるテーブル、またはDELETE CASCADE制約の影響によって更新される可能性があるテーブルです。 トリガーステートメントを発行したセッションは、変更テーブルをクエリまたは変更できません。この制限により、トリガーが一貫性のないデータセットを参照するのを防ぎます。 ただし、insert into empSQL DeveloperまたはSQL * Plusを使用してこのデモトリガーが「変更テーブル」エラーで失敗しない理由を理解できません。 CREATE OR REPLACE TRIGGER emp_bri BEFORE INSERT ON emp FOR EACH ROW BEGIN SELECT max(id) + 1 INTO :NEW.id FROM emp; UPDATE emp SET salary = 5000; END emp_bri; 挿入は次のid値で正常に完了し、すべてのempレコードを更新します。Oracle Database 11g Enterprise Editionリリース11.2.0.1.0を使用しています。複合トリガーについて読みましたが、サンプルでは使用していません。

2
SQL Serverバックアップが失敗しました。エラー:3041、重大度:16、状態:1
まず、私はstackexchangeに非常に慣れていないので、ご容赦ください。 SQL Server 9.0.4060を実行しています。 私の問題は、SQL Serverのバックアップが多くのデータベースで失敗し続けることです。 メンテナンスプランは、さまざまなバックアップジョブに対して実行されます。 DIFFバックアップは毎日20:30に、フルバックアップは毎週日曜日の20:30に。 バックアップを完了できないデータベースごとに次の2つのエラーが発生します。 Date 06-11-2012 20:31:06 Log SQL Server (Current - 07-11-2012 11:43:00) Source Backup Message BACKUP failed to complete the command BACKUP DATABASE (dbname) WITH DIFFERENTIAL. Check the backup application log for detailed messages. Date 06-11-2012 20:31:06 Log SQL Server (Current - 07-11-2012 …

1
SQL Serverスナップショットレプリケーションは毎回完全にデータをコピーしますか、それともデルタを発行しますか?
2つのサーバー間のスナップショットレプリケーションを見ています。これが私が持っているものです: 500GBデータベース 〜500MBの毎晩のbcpロード 〜50MBの毎日のトランザクション 使用するレプリケーションの種類について、社内の他のDBAに尋ねていました。スナップショットレプリケーションを使用するように言われました。ただし、私が理解して読んでいることから、ロード後の毎晩、スナップショットはデータベースをディストリビューターに完全にコピーし、他のサーバーを完全に上書きします。 スナップショットはデルタで機能しますか、それとも毎回完全なコピーですか?

3
SQL Server 2008の日時インデックスのパフォーマンスのバグ
SQL Server 2008 R2を使用しており、プライマリIDインデックスを持つ非常に大きな(1億行以上)テーブルdatetimeと、非クラスター化インデックスを持つ列があります。私たちは、の使用に基づいていくつかの非常に珍しいクライアント/サーバーの動作を見ているorder by句を、具体的には、インデックス付きのdatetime列。 私は次の投稿を読みました:https : //stackoverflow.com/questions/1716798/sql-server-2008-ordering-by-datetime-is-too-slow しかし、クライアント/サーバーでは、現在よりも多くのことが進行中ですここで説明を開始します。 次のクエリを実行すると(一部のコンテンツを保護するために編集されます): select * from [big table] where serial_number = [some number] order by test_date desc クエリは毎回タイムアウトします。SQL Serverプロファイラーでは、サーバーに対して実行されたクエリは次のようになります。 exec sp_cursorprepexec @p1 output,@p2 output,NULL,N'select * ..... 次に、クエリを次のように変更した場合、 declare @temp int; select * from [big table] where serial_number = [some number] order by test_date …

2
SQL Server 2012可用性グループは「常にオン」ですか?
従来のSQL Serverクラスターでは、フェールオーバーが発生すると、SQL Serverの障害が発生したインスタンスに接続されているすべてのクライアントは接続を失い、各クライアントはフェールオーバークラスターインスタンスへの新しい接続を再確立する必要があります。 AlwaysON可用性グループはこの問題を軽減しますか?SQL Server 2012 AlwaysON可用性グループの場合のフェイルオーバーは、SQL Serverに接続するクライアントに対して透過的ですか?

2
公開された複製DBのDB互換性レベルを90から100に変更した場合の影響
現在、互換性レベル90(2005)で動作している一連の公開データベースを備えたSQL Server 2008 R2サーバーがあります。 サブスクリプションデータベースもSQL Server 2008 R2ですが、宛先データベースは互換性レベル100に設定されており、レプリケーションは正常に機能しています。 パブリッシュされたデータベースの互換性レベルを変更した場合、レプリケーションに何らかの影響がありますか、それともすべてのサブスクリプションを再初期化してレプリケーションを再開した場合だけでしょうか? パブリッシュされたデータベースの互換性レベルを変更すると、レプリケーションストアドプロシージャの機能が少し変わる可能性があると思いますが、100%確実ではありません。 これは事実ですか?

4
MySQL InnoDBは、READ COMMITTEDであっても削除時に主キーをロックします
序文 私たちのアプリケーションは、DELETEクエリを並行して実行するいくつかのスレッドを実行します。クエリは分離されたデータに影響します。つまりDELETE、別々のスレッドからの同じ行で同時発生する可能性はありません。ただし、ドキュメントごとに、MySQLはDELETEステートメントにいわゆる「次のキー」ロックを使用します。これにより、一致するキーと一部のギャップの両方がロックされます。このことはデッドロックを引き起こし、私たちが見つけた唯一の解決策はREAD COMMITTED分離レベルを使用することです。 問題 巨大なテーブルDELETEがJOIN複数ある複雑なステートメントを実行すると問題が発生します。特定のケースでは、警告が2行しかないテーブルがありますが、クエリは2つの個別のINNER JOINedテーブルから特定のエンティティに属するすべての警告を削除する必要があります。クエリは次のとおりです。 DELETE pw FROM proc_warnings pw INNER JOIN day_position dp ON dp.transaction_id = pw.transaction_id INNER JOIN ivehicle_days vd ON vd.id = dp.ivehicle_day_id WHERE vd.ivehicle_id=? AND dp.dirty_data=1 day_positionテーブルが十分に大きい場合(私のテストケースでは1448行あります)、READ COMMITTED分離モードでもトランザクションはテーブル全体を ブロックしproc_warningsます。 この問題は常にこのサンプルデータ(http://yadi.sk/d/QDuwBtpW1BxB9)で再現されます(MySQL 5.1(5.1.59でチェック)およびMySQL 5.5(MySQL 5.5.24でチェック))。 編集:リンクされたサンプルデータには、クエリテーブルのスキーマとインデックスも含まれています。 CREATE TABLE `proc_warnings` ( `id` int(11) NOT NULL AUTO_INCREMENT, `transaction_id` int(10) …

1
解放されないIOCPリスナー
「Non-yielding IOCP Listener」が何を示しているか誰か知っていますか? 私たちのSQL Serverにはバグチェックダンプがありました。 ===================================================================== BugCheck Dump ===================================================================== This file is generated by Microsoft SQL Server version 9.00.5292.00 upon detection of fatal unexpected error. Please return this file, the query or program that produced the bugcheck, the database and the error log, and any other pertinent information with a …

3
データベースは常にリカバリモードで起動します
サーバーを再起動するたびに、データベースは常に回復モードになり、正常に動作するまでに約20分かかります。これは常に、サーバーを再起動したときにのみ発生するため、いくつか質問があります... これは大きなログファイルが原因である可能性があると言われましたか。それは正しいのでしょうか?そうでない場合、他の原因は何ですか? リカバリを防ぐために、ログファイルのスペースを小さくする必要があります。何が良いですか:縮小または切り捨て? ログファイル/データベースを縮小または切り捨ててサイズを小さくするにはどうすればよいですか?構文は何ですか? 現在Microsoft SQL Server 2008を使用しています。

3
INNODBパフォーマンスリークはどこにありますか?
私には修正できないように見える奇妙な問題があります。私はサーバー/ DB管理者というよりはWebプログラマーなので、ここの誰かが私を助けてくれることを願っています。 状況 私はたくさんの扱うシステムに取り組んでいますupdate、insertとdeleteの要求を。そのため、行ロック機能のストレージエンジンとしてINNODBを選択しました。Gearmanを使用して異なるサーバーでの作業を並列化し、10分ごとに60,000レコードを更新しています。コードはPHPにあり、Zend Frameworkを使用しています。 問題 SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction 上記のエラーは、Gearmanワーカーの1人からほぼ30分ごとに発生します。 の mysql_report MySQL 5.1.63-0+squeeze1 uptime 15 9:52:12 Tue Sep 11 21:25:23 2012 __ Key _________________________________________________________________ Buffer used 55.00k of 16.00M %Used: 0.34 Current 2.92M %Usage: 18.24 Write hit 99.95% Read hit 100.00% …


3
MySQLを使用して定期的に100 GB以上のテーブルで多方向結合を行いますか?
背景: 適切にスケーリングできるようにしたいWebアプリケーションを作成しました。私はGoogleやTwitterではないことを知っていますが、私のアプリはユーザーごとにかなり大量のデータを使用するため、かなり高いデータ要件があります。後ですべてを再構築する必要なく、適切に拡張できるように準備したいと思っています。 私はデータベースの専門家ではなく、ソフトウェア開発者だと思っています。それが私がここに投稿する理由です。うまくいけば、より多くのデータベースの専門知識を持つ誰かが私に助言を与えることができます。 比較的多数のユーザーがいるが、Facebookの番号のようなものは何もないので、私は次のようなDBを期待しています。 1つの「大きなテーブル」: 2億5000万件のレコード 20カラム 約100 GBのデータ インデックス付きのbigint(20)外部キーがあります インデックス付きのvarchar(500)string_id列があります int(11)の「値」列があります 他の4つのテーブル: それぞれ1,000万件のレコード それぞれ約2〜4 GBのデータ これらの各テーブルには4〜8列があります 1つの列はdatetime date_createdです 1つの列はvarchar(500)string_id列です これらの各テーブルから1つまたは2つの列が結合で選択されます これらのテーブルの1つは平均を格納するために使用されます-そのスキーマはbigint(20)id、varchar(20)string_id、datetime date_created、float average_valueです。 私がやりたいこと -2つの比較的高価なクエリ: 新しい平均値を計算します。 外部キーを使用して、大きなテーブルから最大数百万の個別のレコードを選択します。 string_idでグループ化して、新しい平均を計算します。 結果を平均表に挿入します。 現在作成されているように、このクエリは2つの結合を使用します。 ユーザーにサービスを提供するための非正規化された読み取り専用レコードを作成します。 外部キーを使用して、大きなテーブルから1,000〜40,000レコードのいずれかを選択します。 文字列id列を持つ最新のレコードで他の4つのテーブルのそれぞれと結合します。 結果を非正規化テーブルに挿入します。 これらのレコードは、フロントエンドがユーザーに情報を表示するために使用されます。 現在作成されているように、このクエリは4つの結合を使用します。 ユーザーからのリクエストを処理するリアルタイムのフロントエンドDBサーバーに結果をプッシュするバッチバックエンドデータベースで、これらの高価なクエリをそれぞれ実行する予定です。これらのクエリは定期的に実行されます。頻度はまだ決めていません。平均的なクエリは、おそらく1日に1回行うことができます。非正規化クエリは、より頻繁に、おそらく数分ごとに実行する必要があります。 これらの各クエリは現在、MySQLの「ビッグテーブル」に100Kレコードのデータセットを持つ非常にローエンドのマシンで数秒で実行されます。私のスケーリング能力とスケーリングのコストの両方が心配です。 質問: このアプローチは健全に見えますか?全体像の観点から、明らかに問題はありますか? RDBMSは適切なツールですか、それともHadoopファミリのような他の「ビッグデータ」ソリューションを検討する必要がありますか?データは構造化されており、リレーショナルモデルにうまく適合しているため、RDBMSを使用する傾向があります。ただし、ある時点で、RDBMSを使用できなくなる可能性があるというのが私の理解です。本当?このスイッチが必要になるのはいつですか? うまくいきますか?これらのクエリは妥当な時間内に実行できますか?クエリ#1はおそらく数時間待つことができますが、クエリ#2は数分で完了するはずです。 ハードウェアの観点から何を考慮すべきですか?RAMとCPUのボトルネックになる可能性があるのは何ですか?RAMにインデックスを保持することが重要だと思います。他に考慮すべきことはありますか? ある時点で、おそらくデータを分割して複数のサーバーを使用する必要があります。私のユースケースはすでにそのカテゴリにあるように見えますか、それともしばらくの間、1台のマシンを垂直方向にスケーリングできますか?これはデータの10倍で動作しますか?100倍?
11 mysql  rdbms 

1
最小限のダウンタイムで大量のデータを再インポートする最良の方法
週に1回(3つのint / bigint列のみ)のIPルックアップ(読み取り専用参照)データを含む約500,000件のレコードをインポートする必要があります。 データを既存のテーブルとマージすることについて心配したくないので、古いものをクリアして再インポートしたいと思います。 理想的には、データに対して実行されるクエリは引き続き実行されます(これらのクエリの多くは取得されず、インポートの実行中は少し遅く実行することは許容されますが、24時間年中無休で実行する必要があるため、これを実行します)時間外」はオプションではありません)。 これまでに試したこと SSIS:テーブルを切り捨ててインポートするSSISパッケージを作成しました-実行に約30秒かかります(実際には長すぎます)。 一時テーブル:一時テーブルへのインポート、切り捨て、および全体のコピーにも、約30秒かかります。 BCP:一括インポートもかなり遅い(何らかの理由で、SSISよりも遅い(インデックスを維持する必要がない場合でも))-char-> int / bigintトランザクションと関係があると思います:/ ミラーテーブル?したがって、現時点では、ビューを介してテーブルを読み取り、ミラーテーブルにデータをインポートし、このテーブルを指すようにビューを変更することについて疑問に思っています。ちょっとハッキー。 これは一般的な問題のように思われますが、推奨される方法を見つけることができません。 ありがとう

1
デッドロックグラフに犠牲者のいないエントリがあるのはなぜですか?
SQL Server 2008のデッドロックグラフの分析方法を学習しようとしていますが、<victim-list>ノードが空のエントリがたくさん見つかります。これらのエントリの意味がわかりません。被害者がいない場合、どのようにしてデッドロックの原因となっているwaitresourceを特定できますか?これらのエントリはどういう意味ですか? ここに私が見ているエントリーの簡単な例があります: <deadlock-list> <deadlock> <victim-list /> <process-list> <process id="processd2b6508" taskpriority="0" logused="10000" waittime="31" schedulerid="63" kpid="9104" status="suspended" spid="69" sbid="0" ecid="184" priority="0" trancount="0" lastbatchstarted="2012-07-30T01:10:45.550" lastbatchcompleted="2012-07-30T01:10:45.550" clientapp=".Net SqlClient Data Provider" hostname="XXXXXXX" hostpid="3648" isolationlevel="read committed (2)" xactid="30461033" currentdb="5" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056"> <executionStack> <frame procname="" line="1" sqlhandle="0x020000002340c50225c17d0eec9bf7c51129348edffd1c70" /> <!--About 2 more frame tags... --> …

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