タグ付けされた質問 「innodb」

InnoDB:MySQLのACID準拠のストレージエンジン

2
/etc/my.cnfファイルでbinlog-format = ROWを起動時のデフォルトにするにはどうすればよいですか?
クエリSET GLOBAL binlog_format = 'ROW'を実行すると、そのセッションで機能します。 MySQLを停止して再起動した後、この設定を維持するにはどうすればよいですか? 注:私はMySQLのバージョン5.5.19(Moodleを使用)を使用していて、MyISAMからInnoDBにアップグレードしたばかりなので、この新しい設定が必要です。 私はこれら2つのコマンドを(個別に)my.cnfに追加しようとしました:binlog-format = ROWおよびbinlog_format = ROWで、どちらも機能しません。my.cnfを変更するたびに、MySQLを停止して再起動しました。 これを設定しないと発生するエラーは、悪質なエラーメッセージです。 デバッグ情報:ステートメントを実行できません:BINLOG_FORMAT = STATEMENTおよび少なくとも1つのテーブルが行ベースのロギングに限定されたストレージエンジンを使用しているため、バイナリログに書き込むことができません。トランザクション分離レベルがREAD COMMITTEDまたはREAD UNCOMMITTEDの場合、InnoDBは行ログに制限されます。
9 mysql  innodb  my.cnf 

1
同時切り捨てコマンド中にサーバーがクラッシュした後のMySQL INNODBの破損
私のサーバーが今日クラッシュしました。これは、INNODBテーブルの1つでテーブルの同時切り捨てコマンドが原因で発生したと思います。サーバーを再起動できますが、起動後、SQLコマンドを発行しようとするたびに、次のエラーが発生します。 ERROR 2006 (HY000): MySQL server has gone away これはログで起こったことです: 121206 01:11:12 mysqld restarted 121206 1:11:13 InnoDB: Started; log sequence number 275 559321759 InnoDB: !!! innodb_force_recovery is set to 1 !!! 121206 1:11:13 [Note] /usr/libexec/mysqld: ready for connections. Version: '5.0.95-log' socket: '/var/lib/mysql/mysql.sock' port: 3306 Source distribution InnoDB: Error: trying to …

1
Amazon RDS MySQL 5.5 Innodbロック待機タイムアウトを超えました
Amazon RDSに移行して以来、かなりクレイジーなパフォーマンスの問題があり、今日はロックの問題が発生し始めています。そのため、タイムアウトの問題だと思い、使用しているメモリを確認しました。約70MB相当のスワップを行いました。私はmysqltunerを使ってメモリ魔女狩りをしましたが、最大メモリ使用量は約400%と言われていました。Perconaの構成ウィザードのおかげで、今では100%を少し超えています。 ただし、このロックの問題はまだ残っているので、メモリ/スワッピングとは関係がないと思います。それでもロックアウトが発生するのはなぜですか?何が起きてる? 再起動で問題が解決すると確信していますが、それは解決策ではありません。将来これを防ぐために何ができるでしょうか?クエリキャッシュとテーブルをフラッシュしてみましたが、うまくいきました。 RDSのおかげで、他の種類のフラッシュは機能しませんでした:/ 以下に、私が提供できると考えられる豊富な情報を示します。 クエリ INSERT INTO `myTable` (`firstName`, `lastName`, `email`) VALUES ('Travis', 'B...', '...@gmail.com') エラーメッセージ Lock wait timeout exceeded; try restarting transaction テーブルスキーマ CREATE TABLE IF NOT EXISTS `myTable` ( `id` int(15) NOT NULL AUTO_INCREMENT, `firstName` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `lastName` varchar(255) COLLATE utf8_unicode_ci NOT NULL, …

2
Amazon RDS I / Oリクエスト-1つのクエリ= 1つの請求可能なI / O?
Amazon RDSに移行したいInnoDBデータベースがあります。 自分のサーバーでホストされている現在の実装では、月におよそ800万のクエリが表示されます。 RDSサイトによると、I / Oレートは100万リクエストあたり$ 0.10です。 1 I / O = 1クエリですか?つまり、この使用量+ RDS料金に対して月額80ドルが請求されますか?
9 mysql  innodb 

4
InnoDB DELETEのパフォーマンスを向上させる方法は?
だから私はこの監査テーブルを持っています(私のデータベース内の任意のテーブルでのアクションを追跡します): CREATE TABLE `track_table` ( `id` int(16) unsigned NOT NULL, `userID` smallint(16) unsigned NOT NULL, `tableName` varchar(255) NOT NULL DEFAULT '', `tupleID` int(16) unsigned NOT NULL, `date_insert` datetime NOT NULL, `action` char(12) NOT NULL DEFAULT '', `className` varchar(255) NOT NULL, PRIMARY KEY (`id`), KEY `userID` (`userID`), KEY `tableID` (`tableName`,`tupleID`,`date_insert`), KEY …

2
選択クエリは必要以上に時間がかかります
私は、MySQLデータベーステーブルに約2300万件のレコードがあります。一意のものがないため、このテーブルには主キーがありません。2つの列があり、両方にインデックスが付けられています。以下はその構造です。 以下はそのデータの一部です。 今、私は簡単なクエリを実行しました: SELECT `indexVal` FROM `key_word` WHERE `hashed_word`='001' 残念ながら、これはデータを取得して表示するのに5秒以上かかりました。私の将来のテーブルには1500億のレコードがあるため、今回は非常に高いです。 私はExplainコマンドを実行して何が起こっているのかを確認しました。結果は以下のとおりです。 次に、以下のコマンドを使用してプロファイルを実行しました。 SET profiling=1; SELECT `indexVal` FROM `key_word` WHERE `hashed_word` = '001'; SHOW profile; 以下はプロファイリングの結果です。 以下は私のテーブルに関するいくつかの詳細です: では、なぜこれほど時間がかかるのでしょうか。それらもインデックス化されています!将来はたくさんのLIKEコマンドを実行する必要があるので、時間がかかりすぎています。何が悪いのでしょうか?

1
InnoDBテーブルのOPTIMIZE TABLEを安全に強制終了できますか?
kill 警告に関するMySQLのドキュメント: 警告 テーブルに対するREPAIR TABLEor OPTIMIZE TABLE操作を強制終了すると、MyISAMテーブルが破損し、使用できなくなります。そのようなテーブルの読み取りまたは書き込みは、再度(中断することなく)最適化または修復するまで失敗します。 MyISAMについてです。 OPTIMIZE TABLEInnoDBテーブルに対して実行されているプロセスを強制終了することも危険ですか?

2
列が欠落しているにもかかわらず使用されているカバリングインデックス
MariaDB 10 / InnoDBを使用して、次のクエリがあります。 SELECT id, sender_id, receiver_id, thread_id, date_created, content FROM user_message WHERE thread_id = 12345 AND placeholder = FALSE ORDER BY date_created DESC LIMIT 20 このクエリは、指定された条件に従ってメッセージをフェッチし、作成日順に並べ替えます。 をカバーするインデックスがあり(thread_id, date_created)ます。 EXPLAINを実行すると、正しいインデックスが使用され、クエリがインデックスにないステートメントの途中で列を使用しているにもかかわらず、「Using where」という出力が表示されます。「placeholder = x」には任意の値を使用でき、結果は同じです。 別の列を使用するように並べ替えを変更すると、EXPLAINは「whereの使用。filesortの使用」を正しく示します。 ひっかきの瞬間があります。誰かがこれに光を当ててくださいませんか?追加の列のためにカバリングインデックスを完全に使用できなかったため、追加のfilesortが必要になることを期待します。

2
挿入時のMySqlギャップロックデッドロック
複数のソースから頻繁に挿入すると、テーブルのギャップロックからデッドロックが発生します。これが私のプロセスの概要です。 START TRANSACTION UPDATE vehicle_image SET active = 0 WHERE vehicleID = SOMEID AND active = 1 Loop: INSERT INTO vehicle_image (vehicleID, vehicleImageFilePath, vehicleImageSplashFilePath ,vehicleImageThumbnailFilePath, vehicleImageMiniFilePath, mainVehicleImage, active) VALUES (%s, %s, %s, %s, %s, %s, 1); END TRANSACTION の出力SHOW Create table vehicle_image;は次のとおりです。 CREATE TABLE `vehicle_image` ( `vehicleImageID` int(11) NOT NULL …

3
InnoDBテーブルの複合セカンダリインデックスの最後の列として主キーを持つことは何をしますか?
たとえば、1対Nの関係があるとし(person_id, pet_id)ます。pet_idが主キーであるテーブルがあります。 InnoDBセカンダリインデックスは基本的にBツリーであり、値は行の対応するプライマリキー値であると理解しています。 さて、一人の人が何千ものペットを持つことができ、私はしばしば人のペットをの順にしたいとしpet_idます。次に、セカンダリインデックスのレコードが並べ替えられている(person_id, pet_id)か、並べ替えられていないためのだけperson_idであるかが重要になります。後で推測。pet_idperson_id では、person_idが一意でない場合、レコードは、(person_id, pet_id)またはJUST によって物理的にソートされていpet_idますか? ありがとう

2
MySQLがメモリを解放しない
MySQLは、大きな挿入または選択ステートメントが実行された後、テーブル全体をキャッシュ(テーブルサイズ=〜20GB)に保持したいようです。現在、私のinnodbバッファープールは20GBです。合計RAMは32GBです。メモリ使用量とinnodbステータスからの出力、およびmysqltunerからの出力を提供します。過去数日間、私は気が狂っている。助けてください!フィードバックに感謝します。さらに情報が必要な場合はお知らせください。 また、「FLUSH TABLES」を実行すると、メモリ内で閉じて再度開きます。少なくとも私はそれが起こっていると思います。一連の挿入を実行する前のinnodbの現在のメモリステータスは次のとおりです。 ---------------------- BUFFER POOL AND MEMORY ---------------------- Total memory allocated 21978152960; in additional pool allocated 0 Dictionary memory allocated 6006471 Buffer pool size 1310719 Free buffers 347984 Database pages 936740 Old database pages 345808 Modified db pages 0 Pending reads 0 Pending writes: LRU 0, flush list 0, …
8 mysql  innodb  memory 

1
MySQLでInnoDBテーブルを最適化する方法
私はMySQLで断片化されたテーブルのみを最適化する方法を調査しており、テーブルの最適化に関するこの投稿をレビューしました。基本的には、任意のテーブルについてinformation_schemaデータベースに対してクエリを実行し、それらのテーブルのみdata_free > 0に対するSQLステートメントを作成しますOPTIMIZE。このクエリを実行したところ、最適化のために148のテーブルが特定されました。識別されたすべてのテーブルはInnoDBテーブルです。結果の最適化SQLスクリプトを実行した後、元のスクリプトを再実行して断片化されたテーブルを識別し、最初のパスでまったく同じテーブルを返しました。 InnoDBテーブルとOPTIMIZEコマンドに関して競合する投稿を見ました。OPTIMIZEInnoDBテーブルでは機能せず、実行する必要があると言う人もいますALTER TABLE table_name ENGINE=INNODB。InnoDBテーブルに対して実行するときOPTIMIZEに実際にALTER TABLEコマンドを呼び出すという人もいます。そのことを念頭に置いて、ALTER TABLEフラグメント化されていると識別されたInnoDBテーブルの1つに対してコマンドを実行し(data_free > 0)、data_freeその後は変更されないことがわかりました。それはまだ0より大きいです。また、MySQLを再起動し、同じ結果を見つけるためだけにチェックしました。 これで、MySQL 5.5.29を実行しているサーバーがいくつか組織にあり、それらすべてに対してクエリを実行して、InnoDBテーブルを特定しましたがDATA_FREE=0 or NULL、何も返されませんでした。それらはすべてゼロより大きいです。 また、ゼロより大きいOPTIMIZEいくつかのMyISAMテーブルに対してコマンドを実行し、DATA_FREE後でそれがゼロであることを確認しました。 誰かがこれについて私にいくつかの光を当てることができますか?InnoDBテーブルから断片化を削除する適切な方法は何ですか?断片化されたInnoDBテーブルを特定する適切な方法は何ですか? ありがとう

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億のレコードがあります(そうです、将来のためにシャーディングを検討しています...)。典型的なクエリは次のようになります。 …

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/

2
.frmファイルだけからテーブルスキーマを抽出するにはどうすればよいですか?
mysqlのデータディレクトリをバックアップから抽出し、古いテーブルからスキーマを取得する必要がありますが、それは別のマシンからのバックアップです。 今日、これを行う方法についてのチュートリアルを多数読んでいますが、失敗するように見えるたび、またはmysqlがハングまたはクラッシュするためにmysqlを再インストールする必要があります。私は以下を試しました: 別のデータベースを作成する そのデータベースに同じ名前のテーブルを作成する ファイルを置き換える エンジンの停止/開始 .frmファイルから回復する いろいろな順番や組み合わせで試してみました。 .frmファイルからスキーマを抽出できる外部ツールはありますか?ファイルを開くと、列名が表示されます。私は一見したが、これを可能にする何かを見つけることができないようです。 前もって感謝します。

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