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

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

2
MySQLがディスク上に非常に多くの一時テーブルを作成しているのはなぜですか?
構成の間違いにより、mysql..mysqlチューナーショーで一時テーブルが多くなりすぎる可能性があります Current max_heap_table_size = 200 M Current tmp_table_size = 200 M Of 17158 temp tables, 30% were created on disk table_open_cache = 125 tables table_definition_cache = 256 tables You have a total of 97 tables You have 125 open tables. Current table_cache hit rate is 3% 以前の一時テーブルは「23725個の一時テーブルのうち38%がディスク上に作成されたもの」でしたが、max_heapとtmp_tableを16mから200mに変更し、30%に下げました。 構成: engine myisam …
13 mysql  innodb  myisam  memory 

2
InnoDBテーブルから断片化をどのように削除しますか?
複数のテーブルを持つデータベースがあります。 レコードの数が20Kまたは50Kを超えていると言うテーブルからいくつかのレコードを削除したい。 すべてのテーブルはInnoDBです。そして、file_per_tableあるオフ。 いくつかのテーブルからレコードを削除すると、テーブルに断片化が生じます。 断片化を削除する方法はありますか? 4月17日に更新 mysql> select TABLE_NAME, TABLE_SCHEMA, Data_free from information_schema.TABLES where TABLE_SCHEMA NOT IN ('information_schema', 'mysql') and Data_Free >0; +-----------------+--------------+-----------+ | TABLE_NAME | TABLE_SCHEMA | Data_free | +-----------------+--------------+-----------+ | City | world_innodb | 5242880 | | City_Copy | world_innodb | 5242880 | | Country | world_innodb | …

4
主キーとしてのMySQL intとvarchar(InnoDB Storage Engine?
私はWebアプリケーション(プロジェクト管理システム)を構築していますが、パフォーマンスに関してはこれについて疑問に思っていました。 課題テーブルがあり、その中には他のさまざまなテーブルにリンクする12の外部キーがあります。そのうち8つは、他のテーブルからタイトルフィールドを取得するために参加する必要があります。これは、Webアプリケーションでレコードが意味をなすようにするためです。これらの結合ごとに1つのフィールド。 今、永続的な理由で自動増分主キーを使用するように言われました(シャーディングがGUIDを使用する必要がある場合を除きます)が、varchar(最大長32)のパフォーマンスを使用するのはどれほど悪いですか?つまり、これらのテーブルのほとんどは、おそらく多くのレコードに含まれないでしょう(それらのほとんどは20未満でなければなりません)。また、タイトルを主キーとして使用すると、95%の時間を結合する必要がないため、SQLの95%でパフォーマンスヒットさえ発生します(私は思う)。私が考えることができる唯一の欠点は、私はより高いディスクスペース使用量を持っているということです(しかし、1日は本当に大したことです)。 列挙の代わりにこのようなものの多くにルックアップテーブルを使用している理由は、これらの値のすべてがアプリケーション自体を介してエンドユーザーによって構成可能である必要があるためです。 多くのレコードを持つことを除いて、テーブルの主キーとしてvarcharを使用することの欠点は何ですか? 更新-いくつかのテスト それで、私はこのものでいくつかの基本的なテストをすることにしました。私は100000レコードを所有しており、これらは基本クエリです。 ベースVARCHAR FKクエリ SELECT i.id, i.key, i.title, i.reporterUserUsername, i.assignedUserUsername, i.projectTitle, i.ProjectComponentTitle, i.affectedProjectVersionTitle, i.originalFixedProjectVersionTitle, i.fixedProjectVersionTitle, i.durationEstimate, i.storyPoints, i.dueDate, i.issueSecurityLevelId, i.creatorUserUsername, i.createdTimestamp, i.updatedTimestamp, i.issueTypeId, i.issueStatusId FROM ProjectManagement.Issues i ベースINT FKクエリ SELECT i.id, i.key, i.title, ru.username as reporterUserUsername, au.username as assignedUserUsername, p.title as projectTitle, pc.title as ProjectComponentTitle, …

4
InnoDBの行ロック-実装方法
私は今、mysqlサイトを読んで見回していますが、それがどのように機能するかを正確に見ることができません。 書き込みの結果を選択して行ロックし、変更を書き込み、ロックを解除します。audocommitはオンです。 スキーム id (int) name (varchar50) status (enum 'pending', 'working', 'complete') created (datetime) updated (datetime) ステータスが保留中のアイテムを選択し、作業中に更新します。排他的な書き込みを使用して、同じアイテムが2回ピックアップされないようにします。 そう; "SELECT id FROM `items` WHERE `status`='pending' LIMIT 1 FOR WRITE" 結果からIDを取得します "UPDATE `items` SET `status`='working', `updated`=NOW() WHERE `id`=<selected id> ロックを解除するために何かする必要がありますか?
13 mysql  innodb  locking 

2
ファイルが移動されたInnoDBテーブルを回復する方法
そのため、レプリケーションストリームでセットアップされたテストデータベースサーバーがあります。名前を超えて、スレーブdatadirのスペースをすぐにいっぱいにする最適化が行われました。Mysqlは忠実に、もう少しスペースを待っていました。 このdatadirはmysqlのdatadirとしてのみ使用されるファイルシステムであるため、他に解放するものはありませんでした。 レプリケーションストリームの一部ではない4ギガのinnodbテストテーブルがあったので、それが機能するかどうかを確認するために何かを試してみようと思ったのです。 これが私がとったステップです 移動しようとしていたテーブルをフラッシュしました 読み取りロックを設定しました(書き込みがなく、レプリケーションストリームにない場合でも) .frmと.ibdをファイルシステムにコピーし、予備の部屋を用意しました テーブルのロックを解除しました そのテーブルは切り捨てられました-これにより、最適化が完了するのに十分なスペースが解放され、レプリケーションが再び開始されます。 mysqlのスレーブ化/シャットダウンを停止する ファイルをtmpからデータディレクトリにコピーして戻します mysqlを再起動します .errログには何も表示されず、見た目は良好です。mydbに接続して使用します。ショーテーブルで私がいじっていたテーブルを参照してください。しかし、私が試してみると select * from testtable limit 10; エラーが出ます ERROR 1146 (42S02): Table 'mydb.testtable' doesn't exist 私がこれまでに伝えることができることから、私は他のすべてのテーブルから問題なく読むことができ、複製は苦情なしでバックアップを開始しました。 この時点から回復するためにできることはありますか?必要に応じてゼロから再構築できますが、他の人がこのベンチャーについて一般的に考えていることを知りたいと思いました。完璧な結果が得られなかった一連の手順について何かありましたか? これがテストサーバーでない場合、「ライブで実行」して何が起こるかを確認できませんでした。私がそれを気に入らなければならなかった場合、本番スレーブのスペースを一時的に解放する最良の方法は何でしょうか?

2
INSERTは自動コミットされますか?
私たちのアプリケーションは、レコードを追加するためにMySQLデータベースに対してINSERTクエリを起動します。レコードが自動コミットされるかどうかを知りたい。ROLLBACKコマンドを実行すると、データベースはいつロールバックを実行しますか?COMMITの後にROLLBACKは可能ですか?
13 mysql  innodb 


4
MySQL InnoDBバッファープールインスタンスの最適数
サーバーの特性 合計システムRAM:8GB(MySQL + MySQL以外のものを実行、つまりMySQL専用ではない) CPUコアの数:6 データベースに約2GBのデータがあります InnoDBバッファープールサイズを4GBに設定しています どちらが良いですか: Innodbバッファープールインスタンスが1に設定されていますか? Innodbバッファープールインスタンスが2(各2GB)に設定されていますか? Innodbバッファープールインスタンスが4(各1GB)に設定されていますか? Innodbバッファープールインスタンスを8(デフォルト設定)に設定 したがって、バッファプールインスタンスと、全体として「そのような大きなInnoDBバッファプールサイズがあると、インスタンスを使用するか、OSスワップが発生する」となる理由を判断する方法がわかりません。


3
MySQL:通信パケットの読み取りエラー
私はmysqlでこの警告を受けます、 [Warning] Aborted connection 21 to db: 'MyDB' user: 'MyUser' host: 'localhost' (Got an error reading communication packets) 私はグーグルでいくつかのトピックを経験しました、そしていくつかの提案によると私max_allowed_packetは128 to 512 to 1024まだ同じ行動からそれを増やしました。 私は、Drupalの7を使用していますし、そうBLOBデータの種類がたくさんありますが、1024 Mbのmax_allowed_packet私の意見では十分なはずです。 この警告を克服する他の回避策はありますか? 編集: @Rolandoの提案/回答としていくつかの設定を追加しましたが、同じ警告が表示されます。 私のmysql構成は次のようになります。 [client] port = 3306 socket = /tmp/mysql.sock default-character-set = utf8 [mysqld] port = 3306 socket = /tmp/mysql.sock skip-external-locking key_buffer_size = 16K …
13 mysql  innodb 

1
MySQL:トランザクションは行をロックしますか?
これまでにMySQLトランザクションを使用したことはありません。何かを明確にしたいだけです。 2人のユーザーが正確な時間にクエリを実行した場合、MySQLはこれをどのように処理しますか?たとえば、ユーザーがレコードを更新しようとしています。 user1:テーブルセットの更新column = column-4 where column_id = 1; user2:テーブルセットを更新しますcolumn = column-7 where column_id = 1; トランザクションを使用する場合、MySQLは最初に実行されるクエリを選択し、最初のクエリがコミットされるまで2番目のユーザーをロックしますか?それはテーブルロックですか、それとも行ロックですか? 3番目のユーザーがselectステートメントを発行するとどうなりますか?MySQLが返す値は何ですか? PSこれはInnodbにあります。

4
全文検索の結果、「FULLTEXT初期化」に費やされる時間が長くなります
現在、Stack Overflowのコメントのデータダンプに対していくつかのクエリを実行しようとしています。スキーマは次のようになります。 CREATE TABLE `socomments` ( `Id` int(11) NOT NULL, `PostId` int(11) NOT NULL, `Score` int(11) DEFAULT NULL, `Text` varchar(600) NOT NULL, `CreationDate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `UserId` int(11) NOT NULL, PRIMARY KEY (`Id`), KEY `idx_socomments_PostId` (`PostId`), KEY `CreationDate` (`CreationDate`), FULLTEXT KEY `Text` (`Text`) ) ENGINE=InnoDB …

1
バラクーダと圧縮の利点
私はMySQLのファイル形式AntelopeとBarracudaについて少し前に読んでいますが、BarracudaとCompressionを利用することで利益が得られるのではないかと考えています。 私のサーバーはMySQLのデフォルトであるため、現在Antelopeを使用しています。 私が持っている大規模なデータベースのために、メモリに関する問題が何度もありました。私のデータベースは毎日増加しています。 http://www.mysqlperformanceblog.com/2008/04/23/real-life-use-case-for-barracuda-innodb-file-format/のような圧縮は、少数の人々に利益をもたらしているようです 。 私はメモリとディスク容量が低くなることを理解していますが、これを理解しているかどうかはわかりません(記事から引用): 「トップに応じて〜5%のCPU負荷(80〜100%からほとんどI / Oを待っています) 0.01主キーによる平均検索時間(変換前の1〜20秒) データが圧縮されている場合、サーバーは元のデータを再度取得するために圧縮を解除する必要があるため、これらの2つのことは改善されないと考えました。 これは、読み取り/書き込み集中型のアプリケーションで役立ちますか?Barracuda and Compressionに変更することをお勧めしますか? バラクーダの問題を知っていますか? 次の質問の答えはいくつかの問題を指摘しているようですが、2011年からですので、今では修正されていると思います:https : //serverfault.com/questions/258022/mysql-innodb-how-to-switch -to-barracuda-format

3
MySQLインスタンスが「同期インデックスを実行中」にストールする
問題 InnoDBテーブルを持つデータベースを実行する(ほとんどの場合)MySQL 5.6.20のインスタンスは、すべてのINSERT、UPDATE、およびDELETEクエリが「クエリ終了」状態のままで、1〜4分間、すべての更新操作に対して時々ストールします。これは明らかに最も不幸なことです。MySQLのスロークエリログは、非常に些細なクエリでさえ、異常なクエリ時間を記録しています。何百ものものが、失速が解決された時点に対応する同じタイムスタンプで記録されます。 # Query_time: 101.743589 Lock_time: 0.000437 Rows_sent: 0 Rows_examined: 0 SET timestamp=1409573952; INSERT INTO sessions (redirect_login2, data, hostname, fk_users_primary, fk_users, id_sessions, timestamp) VALUES (NULL, NULL, '192.168.10.151', NULL, 'anonymous', '64ef367018099de4d4183ffa3bc0848a', '1409573850'); デバイス統計は増加していますが、この時間枠ではI / Oの負荷は過剰ではありません(この場合、上記のステートメントのタイムスタンプによると、更新は14:17:30から14:19:12に失速しました)。 # sar -d [...] 02:15:01 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util …

6
MySQLの大きなテーブルに列を追加する方法
私はPHP開発者なので、厳しくしないでください。約5.5GBの大きなテーブルがあります。私たちのPMは、新しい機能を実行するために新しいコラムを作成することにしました。テーブルはInnoDBなので、私が試したのは: 画面ロックでテーブルを変更します。約30時間かかりました。だから止めました。最初にすべてのトランザクションを終了しなかったためにミスをしましたが、2回目はマルチロックではありませんでした。ステータスはでしたcopy to tmp table。 このテーブルにもパーティションを適用する必要があるため、ダンプを作成し、名前を変更して、同じ名前と新しい構造のテーブルを作成することにしました。しかし、ダンプは厳密なコピーを作成しています(少なくとも他の何かは見つかりませんでした)。そこで、新しい列をダンプしsedてクエリを追加しました。しかし、いくつかの奇妙なエラーが始まりました。文字セットが原因だと思います。utf-8およびfileのテーブルは、後にus-asciiになりましたsed。そのため、データの30%でエラー(不明なコマンド '\' ')が発生しました。したがって、これも悪い方法です。 これを達成し、パフォーマンスを高速化する他のオプションは何ですか(PHPスクリプトで実行できますが、時間がかかります)。INSERT SELECTこの場合のパフォーマンスはどうなりますか。 事前に感謝します。
12 mysql  innodb 

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