データベース管理者

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

1
UserDB選択の特定のTempDB挿入により、SOS_SCHEDULER_YIELDからENCRYPTION_SCANが返されます。
実稼働システムの1つで、ユーザーデータベースから一時テーブルへの1つの挿入ステートメントに問題が発生しています。挿入/選択をコメントアウトすると、問題のストアドプロシージャがタイムリーに実行されるため、問題の切り分けに自信があります。 問題の挿入/選択のコメントを解除すると、呼び出された一連のストアドプロシージャが基本的に停止して停止します。tempdbやユーザーデータベースで、年齢別の上位トランザクションに何も表示されません。データベースが「静止」しているときに、アクティビティモニターの情報から逸脱するアクティビティモニターに何も表示されません。ただし、CPUは約20%で平坦化されます。 動作は次のとおりです。再生ケースをセットアップして実行すると、問題の挿入/選択に到達すると、SOS_SCHEDULER_YIELDが表示され、ENCRYPTION_SCANが表示されます。約5時間後、ストアドプロシージャの処理が再開され、アクティビティが完了します(すべての個別の操作の周りに、迅速でダーティなログステートメントを配置します)。 また、挿入の選択部分の変数を実行時の値に置き換え、選択クエリ自体を実行したところ、5秒で戻りました。 問題のユーザーデータベースは、tempdbと同様に、暗号化が有効な値としてFALSEを持っています。問題の操作は約6万5千行のデータで発生し、1千行のみで試したところ、動作は持続しましたが、所要時間ははるかに短かったです。 シングルユーザーデータベースは、この動作の唯一のインスタンスです。そのユーザーデータベースのバックアップを介してローカルで再現しました。この問題を示さないソフトウェアのユーザーが約70人います。 上記の情報を踏まえて、私の質問は、ストアドプロシージャの処理が停止するのはなぜですか?正確な答えを期待することはおそらく楽観的であるため、これをデバッグするための正しい手順は何ですか?おそらく、dm_tran_locks、dm_exec_requests、dm_tran_database_transactions、dm_os_schedulers、dm_exec_sessionsなどのDMVの1つに何かがあり、それらは私にいくつかの情報を提供しましたが、解決策を指すような方法で出力を解釈または理解していません。 以下は問題の挿入/選択です: INSERT INTO #TS_EVENT_DATA ( EVENT_FK, EVENT_TYPE_CR_FK, EVENT_ENTITY_CLASS_CR_FK, userDatabase_ID, DATA_NAME_FK, IMPORT_JOB_FK, PRODUCT_STRUCTURE_FK, ORG_ENTITY_STRUCTURE_FK, ENTITY_CLASS_CR_FK, ENTITY_DATA_NAME_FK, ENTITY_STRUCTURE_FK, DATA_SET_FK, DATA_TYPE_CR_FK, ORG_IND, TABLE_NAME, NET_VALUE1_NEW, NET_VALUE2_NEW, NET_VALUE3_NEW, NET_VALUE4_NEW, NET_VALUE5_NEW, NET_VALUE6_NEW, NET_VALUE1_CUR, NET_VALUE2_CUR, NET_VALUE3_CUR, NET_VALUE4_CUR, NET_VALUE5_CUR, NET_VALUE6_CUR, PERCENT_CHANGE1, PERCENT_CHANGE2, PERCENT_CHANGE3, PERCENT_CHANGE4, PERCENT_CHANGE5, PERCENT_CHANGE6, VALUE_UOM_CODE_FK, ASSOC_UOM_CODE_FK, VALUES_SHEET_NAME, UOM_CONVERSION_FACTOR, END_DATE_CUR, …

4
Windows 7エラーINS-30131でのOracle 12cのインストール
Windows 7 x64コンピューターにOracle 12cをインストールしようとしていますが、しばらくすると次のエラーが表示されます。 SEVERE: [FATAL] [INS-30131] Initial setup required for the execution of installer validations failed. CAUSE: Failed to access the temporary location. ACTION: Ensure that the current user has required permissions to access the temporary location. *ADDITIONAL INFORMATION:* - Framework setup check failed on all the nodes - …

3
複数挿入トランザクションでIDを参照する方法は?(postgres)
テーブル "entity.eid"が自動インクリメントであると仮定すると、同じトランザクションで後で割り当てられた自動インクリメント値を参照できるようにしたいと思います。私がこれを行っている方法は、私が最適ではないと思う複数のトランザクションを実行することです。 START TRANSACTION; INSERT INTO entity ...; INSERT INTO t2 (eid, ...) VALUES (?NEW EID REF HERE?, ...), (...), (...); COMMIT;

1
MySQLは巨大なテーブルと単純なSELECTにFORCE INDEXを必要とします
さまざまなソースからの記事をMySQLテーブルに保存し、ユーザーがそれらの記事を日付順に取得できるようにするアプリケーションがあります。記事は常にソースによってフィルタリングされるため、クライアントSELECTの場合は常に WHERE source_id IN (...,...) ORDER BY date DESC/ASC INを使用しているのは、ユーザーが多くのサブスクリプションを持っているためです(一部には数千のサブスクリプションがあります)。 次に、articlesテーブルのスキーマを示します。 CREATE TABLE `articles` ( `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, `source_id` INTEGER(11) UNSIGNED NOT NULL, `date` DOUBLE(16,6) NOT NULL, PRIMARY KEY (`id`), KEY `source_id_date` (`source_id`, `date`), KEY `date` (`date`) )ENGINE=InnoDB AUTO_INCREMENT=1 CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' COMMENT=''; (日付)インデックスが必要です。ソースでフィルタリングせずに、このテーブルでバックグラウンド操作を実行している場合があるためです。ただし、ユーザーはこれを行うことはできません。 テーブルには約10億のレコードがあります(そうです、将来のためにシャーディングを検討しています...)。典型的なクエリは次のようになります。 …

2
大きな初期サイズで新しいデータベースを作成する
200 GBのデータファイル(.mdf)と50 GBのログファイル(.ldf)を使用して新しいデータベースを作成します。 しかし、それは非常に遅いです(それは約15分ですが、まだ作成されていません)。そしてそれは非常に時間がかかります。それは正常ですか?はいの場合、それは何をするのに時間がかかりますか?作成速度を上げることはできますか? SQL Server 2008 R2、Windows Server 2008R2、16 GB RAM(ssmsでは12 GBに制限した)、およびCore i7 Cpuを使用しています

1
pgadmin3からのpg_restoreエラー-Postgresql
pgadmin3ツールを使用して、system1からpostgresql dbのバックアップを作成しました。作成されたバックアップファイルの拡張子は「.backup」です。 postgresql 9.0とpgadmin3 1.8がインストールされている別のシステム2に復元しようとしていますが、エラーが発生します クエリを実行できませんでした:エラー:認識されない構成パラメーター "lock_timeout"コマンドは次のとおりです:SET lock_timeout = 0; 両方のシステムの構成 system1 win7-64bit postgresql 9.0.13-1-64bit pgadmin 1.8 system2 win7-32​​ビットpostgresql 9.0.13-1-32ビットpgadmin 1.8

2
MySQL-最後の行が削除された場合、自動インクリメントは連続してインクリメントしません
自動インクリメントされた主キーIDを含むテーブルがあります。最後の行(たとえば、最高のID、たとえばid = 6)を削除して新しい行を挿入すると、新しいIDは7から始まります。主キーが6から始まることを変更する必要があるパラメーターはどれですか。 CREATE TABLE animals ( id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id) ) ENGINE=MyISAM; INSERT INTO animals (name) VALUES ('dog'),('cat'),('penguin'), ('lax'),('whale'),('ostrich'); 結果: ID名 1犬 2猫 3ペンギン 4亜麻 5クジラ 6ダチョウ DELETE FROM animals WHERE id = 6; INSERT INTO animals (name) VALUES ('x'); 結果: …

3
MySQLがグローバルルーチン(ストアドプロシージャや関数)を作成する可能性
どういうわけかグローバルに利用可能なルーチンを定義することは可能ですか?すべてのルーチンはデータベースのスコープ内で作成する必要があるようです。 (事前に発行せずにuse dbname)コンソールからルーチンを作成しようとすると、エラーが発生します。 ERROR 1046 (3D000): No database selected 同一のデータベースが大量にあり(データは異なります)、いくつかのテーブル名に対していくつかのトリガーを作成することが目標です。ただし、実行するルーチンは1つだけにしたいので、データベースごとにこれらのルーチンを作成する必要はありません(これらは同じなので、ルーチンは各データベースで同じように動作します)。

1
SQL Server-たとえば、理想的なメモリを決定する方法
Xメモリが割り当てられている仮想マシンがいくつかあります。このメモリ量はややランダムです。これは、物理マシンが持っていたメモリの量、ベンダーの推奨、またはインスタンスに必要なメモリの量について推測した結果、マシンに割り当てられました。 私はメモリが多いほど良いと理解していますが、必要でないときにVMにメモリを過剰に割り当てないようにしたいと思います。メモリは別のマシンでより適切に利用できます。 実際にアクティブで使用されているインスタンスごとの理想的なメモリ量を決定する最良の方法は何ですか?ページの平均余命に加えて、注意すべき他のカウンターはありますか?10k +のPLEを持つインスタンスと、100k +を持つ他のインスタンスがあります。 どんな洞察も大歓迎です。ありがとう、サム

2
クラスタ化インデックスの圧縮とテーブルの圧縮-それらは同じものですか?
テーブルのクラスター化インデックスに圧縮(ページまたは行)を設定した場合、それはテーブルに圧縮を設定することと同じですか? SQL Serverは両方を実行するためのオプションを提供しますが、それらは異なることを示唆していますが、クラスター化インデックスとテーブルは基本的に同じものであるという印象を受けました。クラスター化インデックスの動作のメンタルモデルは、クラスター化インデックスを圧縮するテーブルも圧縮する必要があります。

2
MAXを使用したGROUP BY対MAXのみ
私はプログラマーで、次のような大きなテーブルを扱っています。 UpdateTime, PK, datetime, notnull Name, PK, char(14), notnull TheData, float にクラスター化インデックスがあります Name, UpdateTime 私は何が速くなるべきか疑問に思っていました: SELECT MAX(UpdateTime) FROM [MyTable] または SELECT MAX([UpdateTime]) AS value from ( SELECT [UpdateTime] FROM [MyTable] group by [UpdateTime] ) as t このテーブルへの挿入は、同じ日付の 50,000行のチャンクです。したがって、グループ化することでMAX計算が容易になると考えました。 最大150,000行を見つけようとする代わりに、3行にグループ化すると、計算MAXが速くなりますか?私の仮定は正しいですか、グループ化もコストがかかりますか?

3
共有ログインを使用しているときに、監査テーブルで削除アクションを実行しているユーザーを知る方法は?
背景情報: アプリの一連のデータテーブルに対する更新と削除を追跡するために、監査テーブルのコレクションを作成しています。 監査レコードはトリガーを介して作成されます。 アプリのデータベースのDMLは通常、サービスがデータベースにアクセスするために使用するログインから取得されます。このためSYSTEM_USER、トリガーで呼び出されたときの結果は常に同じになると思います。 私のアプリは現在ユーザーデータを保存していませんが、UserIdDMLが実行されるたびに文字列が与えられます(ストアドプロシージャでのみ行われます)。 私が遭遇した問題は、ユーザーがレコードを削除するときに、誰がそれをしたのか知りたいということです。同じログインによって行われるため、すべてのアクションがサービスによって行われたことを確認したくありません。どのユーザーがそれを実行したかを確認したいと思います。ModifiedBy更新の送信で更新される列があるため、これは更新の問題ではありませんUserId。 問題はSYSTEM_USER、削除が実行されたときに、ユーザー情報をトリガーに設定する方法、またはトリガーに取得する方法はありますか? 私が現在持っている「最高の」アイデアは、それが良いアイデアかどうかはまだわかりませんが、サービスで、現在のものUserIdがデータベースとしてユーザーに存在するかどうかを確認し、そうでない場合はユーザーを作成することです彼らのためのオブジェクト。次に、でストアドプロシージャを実行しEXECUTE AS User = @UserIdます。次に、ストアドプロシージャでDMLが実行され、トリガーが起動すると、SYSTEM_USERからユーザーを返す必要がありEXECUTE ASます。

3
トレースフラグとオフにする必要がある理由と理由
SQLサーバーには非常に多くのトレースフラグがあります。それらのいくつかをオフにする必要がある理由。トレースフラグ8017をオフにする必要があることを確認した場所もあります。それで、どのトレースフラグをオフにする必要があるのか​​、なぜ知りたいのですか?

1
複数のテーブルを1つの行として結合した結果を取得する
次の2つのテーブルがあります。 table1: id | name --------- 1 | john 2 | jack table2: id | profile_id | institution ----------------------------- 1 | 1 | SFU 2 | 1 | UBC 3 | 2 | BU 4 | 2 | USC 5 | 2 | SFU ユーザーIDを使用してユーザーに関するすべての情報を取得したい場合は、これを使用して簡単に参加できます。 select a.id, a.name, b.institution from …
8 mysql 

1
テーブルレベルのロックエラーの原因は何ですか?
データベースはすでに2回停止していて、原因を探そうとしました。 show processlist Waiting for global read lock | INSERT INTO {myisam_table} ... ここではディスク領域がいっぱいだったので、それをもう少し与えると問題は終わったと思いましたが、翌日の正午に再びハングしました。 show processlist Waiting for table level lock | UPDATE {myisam_table} ... 何が原因ですか? Mysqlデフォルトエンジン:InnoDB。 データベースには、MyISAMエンジンとInnoDBエンジンの両方を備えたテーブルが混在しています。 ここに投稿されたログ: http://arturito.net/2013/08/28/mysql-waiting-for-table-level-lock-errors/

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