データベース管理者

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

1
EC2-PostgreSQLデータを正しくバックアップする方法
これがセットアップです。3つの追加ボリュームを持つ1つの小さなAmazon Linux(EBS-backed)EC2インスタンス。これは、Webサーバーとデータベースサーバーの両方です。コード用の1つのボリューム、PostgreSQL(8.4)データディレクトリ用の1つのボリューム、およびPostgreSQLからのWALファイルを格納するための1つのボリューム。 (1)WALファイルを含むボリュームには、pg_start_backup()を実行した後にコピーされるデータディレクトリのベースバックアップもあります。次に、PostgreSQLからの継続的なアーカイブ出力(WALファイル)を保存します。このボリュームのスナップショットを作成するには、同期を発行してファイルシステムをフリーズする(XFSの場合はxfs_freezeを使用するか、EXT4の場合はdmsetupを使用する)意味がありますか?または、ライブスナップショットを撮ることができますか?WALファイルは、毎分1つの速度で出荷されます。単一のWALファイルがコピーされている間にスナップショットが開始され、データが破損する可能性はありますか? (2)ライブPostgreSQLデータディレクトリを含むボリュームも、適切な方法で(毎日)バックアップされます。このボリュームのスナップショットを作成する前に、pg_dumpを実行すると、結果のSQLファイルがデータディレクトリに保持されます。実際のデータベースデータの整合性を確保するための予防策を講じることに意味はありますか?ライブスナップショットを作成すると、(a)構成ファイル(postgresql.conf、pg_hba.conf、pg_ident.conf)が適切にバックアップされ、(b)SQLダンプファイルがバックアップされると想定して間違いありませんか。SQLダンプファイルと構成ファイルの2つをバックアップすることが、このボリュームのスナップショットの主なポイントになります。DBはそれほど大きくないので、データファイルがこのスナップショットを膨らませることは気にしません。その場合、ライブスナップショットを作成できます-正しいですか? (2a)ルートボリュームにデータディレクトリを保持し、SQLダンプファイルと構成ファイルを別のボリュームにコピーするバックアップスクリプトを用意し、コピーが完了したらそのボリュームのスナップショットを作成するほうがよいでしょうか? (3)コードが含まれているボリュームについて、ファイルシステムを同期してフリーズするポイントはありますか?または、ライブスナップショットのみを取得できますか?このデータはかなり「静的」である必要があります。 (4)これは確かなバックアップスキームですか?ルートボリュームは定期的にバックアップされません。これは、セットアップして構成した後のマシンイメージを保持するだけだからです。 ありがとう

3
SQLで最初に実行される関数に依存できますか
次のスクリプトを検討してください。 create or replace function f(p_limit in integer) return integer as begin set_global_context ('limit', p_limit); return p_limit; end; / create view v as select level as val from dual connect by level<=sys_context('global_context','limit'); select f(2), v.* from v; /* F(2) VAL ---------------------- ---------------------- 2 1 2 2 */ select f(4), v.* …
9 oracle 

1
単一の包含データベースのユーザーを作成する
私はMSSQLでの作業はかなり新しく、現時点では2012バージョンを使用しています。私がやろうとしているのは、包含データベースのユーザーを作成し、そのユーザーにそのデータベースへのアクセスのみを許可することです。 準備済みステートメントを使用して、JavaからこのSQLを呼び出します。

3
mysqlがデータ送信に時間がかかりすぎる
数百万レコード(14,000,000)の単純なテーブルがあり、単純なクエリでは「データの送信」に時間がかかりすぎています。 テーブル CREATE TABLE IF NOT EXISTS details ( id int(11) NOT NULL, date date NOT NULL, time int(2) NOT NULL, minutes_online decimal(5,0) NOT NULL, minutes_playing decimal(5,0) NOT NULL, minutes_chatting decimal(5,0) NOT NULL, minutes_away decimal(5,0) NOT NULL PRIMARY KEY (id,date,time) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; 簡単なクエリ mysql> SELECT * FROM …

2
PostgreSQL PITR復元
CentOS 5.8 32ビットOSで実行されているPostgreSQL 9.1サーバーを使用していて、WALアーカイブを有効にしています。このサーバーには、databaseA、databaseB、およびdatabaseCの3つのデータベースがあります。誰かがdatabaseBの午後12時にテーブルを削除し、テーブルが削除された時刻の直前にdatabaseBを復元したいと考えています。時間は今午後3時です。 他の2つのデータベースの3時間分のデータを失うことなく、データベースBを午後12時まで復元するにはどうすればよいですか? postgresql.conf wal_level = archive archive_mode = on archive_command = 'test ! -f /opt/pgsql/logs/%f && cp %p /opt/pgsql/logs/%f' max_wal_senders = 100 recovery.conf restore_command = 'cp /opt/pgsql/logs/%f %p' recovery_target_time = '2012-06-29 11:59:59 CEST' 午前9時にベースバックアップを実行しました pg_basebackup -h 127.0.0.1 -D /opt/pgsql/backup PostgreSQLサービスは午後3時にシャットダウンされました。

2
mongodb:ロードバランサー付きのレプリカセット
mongodbレプリカセットを使用した負荷分散のオプションはありますか?私はHAProxyなどを求めているのではなく、mongodbの組み込み機能を求めています。ドキュメントにこれに関するヒントが見つかりませんでした。
9 mongodb 

3
vpsで実行されているmysqlの接続と致命的なエラーを解決する方法
私はlinodeサーバーでアプリケーションPHPlistを実行しています。同時に12個のPHPスクリプトを実行しています。それぞれがMySQL接続を開きます。PHPlistにアクセスすると、次のエラーが表示されることがよくあります。 致命的なエラー:サーバーは現在ビジー状態です。しばらくしてからもう一度お試しください。 phpMyAdminにアクセスしようとすると、#1040エラーが表示されます。cronジョブを実行する私のPHPスクリプトの出力は次のとおりです。 PHP警告:mysqli_connect():(HY000 / 1040):接続が多すぎます 私はサーバーのLAMPスタックをphpMyAdminで使用しています。top端末の出力は、mysqld100〜130%のCPUの使用を示しています。この問題をトラブルシューティングしようとすると、いくつかの手掛かりが得られました。 max_connection変数を増やします:私は200(デフォルトでは100)を使用しています オープンテーブルキャッシュ:512(デフォルトでは400) 設定する変数はたくさんありますが、具体的な変数を特定できません。参照先が 多すぎます。接続が多すぎる とhttp://dev.mysql.com/doc/refman/5.5/en/table-cache。 html しかし、私の使用法によると、メモリを増やす方法と、私にとって最大のメモリはどれほど難しいかです。 私のサーバーでは、約12のPHPスクリプト、メール送信用のPHPlistアプリケーション、およびユーザー登録用の主要なデータベースを使用しています。 この問題の解決を手伝ってください。
9 mysql  phpmyadmin  php 

2
数行を巨大なテーブルに挿入するとパフォーマンスが低下する
店舗からデータを取得し、会社全体の在庫表を更新するプロセスがあります。このテーブルには、日付別およびアイテム別のすべてのストアの行があります。多くの店舗を持つ顧客では、このテーブルは非常に大きくなる可能性があり、5億行程度になります。 この在庫更新プロセスは、通常、ストアがデータを入力するときに1日に何度も実行されます。これらの実行は、ほんの数店舗のデータを更新します。ただし、これを実行して、たとえば過去30日間のすべての店舗を更新することもできます。この場合、プロセスは10のスレッドを起動し、各ストアの在庫を別のスレッドで更新します。 お客様から、プロセスに時間がかかっているとの不満が寄せられています。プロセスのプロファイルを作成したところ、このテーブルにINSERTを実行する1つのクエリが予想以上に多くの時間を消費していることがわかりました。このINSERTは、30秒で完了する場合があります。 このテーブルに対してBEGIN TRANとROLLBACKで区切られたアドホックSQL INSERTコマンドを実行すると、アドホックSQLはミリ秒のオーダーで完了します。 パフォーマンスの遅いクエリは次のとおりです。アイデアは、そこにないレコードを挿入し、後でデータのさまざまなビットを計算するときにそれらを更新することです。プロセスの前のステップでは、更新する必要のあるアイテムを特定し、いくつかの計算を行い、結果をtempdbテーブルUpdate_Item_Workに詰め込みました。このプロセスは10個の個別のスレッドで実行されており、各スレッドはUpdate_Item_Workに独自のGUIDを持っています。 INSERT INTO Inventory ( Inv_Site_Key, Inv_Item_Key, Inv_Date, Inv_BusEnt_ID, Inv_End_WtAvg_Cost ) SELECT DISTINCT UpdItemWrk_Site_Key, UpdItemWrk_Item_Key, UpdItemWrk_Date, UpdItemWrk_BusEnt_ID, (CASE UpdItemWrk_Set_WtAvg_Cost WHEN 1 THEN UpdItemWrk_WtAvg_Cost ELSE 0 END) FROM tempdb..Update_Item_Work (NOLOCK) WHERE UpdItemWrk_GUID = @GUID AND NOT EXISTS -- Only insert for site/item/date combinations that don't …

3
最大数のレコードをpostgresqlに保持することは可能ですか?
基本的に、Postgresqlテーブルの一部はサーバーアクセスログを保持するために使用されます。そのため、本番環境では、これがかなり大きくなる場合があります。postgresqlでテーブルが持つことができるレコードの最大数を設定し、最も古いレコードをプッシュする方法はありますか?


2
SQL Serverは外部キー参照のインデックスキーをどのように選択しますか?
MS Accessからインポートされたレガシーデータベースを使用しています。MS Access> SQL Serverのアップグレード中に作成された、クラスター化されていない一意の主キーを持つ約20のテーブルがあります。 これらのテーブルの多くには、主キーの複製である一意の非クラスター化インデックスもあります。 私はこれを片付けようとしています。 しかし、主キーをクラスター化インデックスとして再作成した後、外部キーを再構築しようとすると、外部キーが(重複していた)古い重複インデックスを参照しています。 重複したインデックスを削除できないため、これを知っています。 SQL Serverでは、主キーが存在する場合は常にそれを選択すると思います。SQL Serverには、一意のインデックスと主キーの間で選択する方法がありますか? 問題を再現するには(SQL Server 2008 R2の場合): IF EXISTS (SELECT * FROM sys.tables WHERE name = 'Child') DROP TABLE Child GO IF EXISTS (SELECT * FROM sys.tables WHERE name = 'Parent') DROP TABLE Parent GO -- Create the parent table CREATE …

1
要素名の変数
私は問題なく動作するこのtSQLコードを持っています: SELECT c.logguid, a.b.value('./PropertyValue', 'varchar(max)') asd FROM [dnn].[dbo].[EventLog2] c cross apply sss.nodes('/LogProperties/LogProperty[PropertyName=sql:variable("@x") and PropertyValue=sql:variable("@y")]') as a(b) しかし、私ができるようにしたいのは、各値の間でORされる値の多くのペアの動的リストを渡すことです。 SELECT c.logguid, a.b.value('./PropertyValue', 'varchar(max)') asd FROM [dnn].[dbo].[EventLog2] c cross apply sss.nodes( '/LogProperties/LogProperty[PropertyName=sql:variable("@x") and PropertyValue=sql:variable("@y") or PropertyName=sql:variable("@a") and PropertyValue=sql:variable("@b") ]' ) as a(b) これを行う方法はありますか?
9 t-sql  xml 

3
enqのトラブルシューティング方法:TX-行ロックの競合?
次のような状況です。 私はRACを持っています。両方のノードにロックがあります。 最初のノード SID EVENT USERNAME BLOCKING_SESSION ROW_WAIT_OBJ# OBJECT_NAME LOCKWAIT SQL_ID STATUS 1 102 enq: TX - row lock contention MYUSER 155 136972 TABLE1V 0000000810EFA958 5f4bzdg49fdxq ACTIVE 2 111 enq: TX - row lock contention MYUSER 155 136972 TABLE1V 0000000810EFAC98 5f4bzdg49fdxq ACTIVE セッション情報をブロックしています SID EVENT USERNAME ROW_WAIT_OBJ# OBJECT_NAME LOCKWAIT SQL_ID …

2
SQL Serverは行ごとに関数を1回評価しますか?
次のようなクエリがあります。 SELECT col1 FROM MyTable WHERE DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) BETWEEN col2 AND col3 ; これにより、次のような実行プランのツールチップが表示されます。 dateadd求める述語の一部は、クエリ内のすべての行に対して実行されますか?または、SQL Serverはクエリ全体の値を1回計算しますか?

1
Oracle 10gのSQL置換機能
3〜4年前に、DBAが緊急インシデントの解決のためにリアルタイムSQL置換のOracle 10g機能を使用したというOracleブログをどこかで読みました。基本的に、彼は特定のクエリAを受信するたびに代わりに別のクエリBを実行するようにOracleを構成しました。アプリケーションコードの変更やスキーマの変更はありません。単純な「AではなくBクエリを実行する」タイプの構成のみです。 その機能を使用する予定はありませんが(いくつかの望ましくない結果が考えられます)、好奇心からそれは本当に存在しますか?はいの場合、その機能は何と呼ばれますか?

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