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

MyISAMは、MySQLの非トランザクションストレージエンジンです。高速な保存と検索、および全文検索機能を提供します。さらに、これは、MySQL 5.5より前のバージョンのデフォルトのストレージエンジンタイプです。

3
MySQLテーブルがクラッシュするのはなぜですか?どうすれば防止できますか?
私は、Moodleサイトの管理者です。そのユーザテーブルが破損していて、使用できなくなりました。 幸いなことに、シンプルなREPAIR TABLE mdl_userもので再び機能しました。問題は、実際にクラッシュしてそれが使用できなくなった理由がわからないことです。次回はよりよく準備できるようにしたいと思います。 私は完全に経験豊富なDBAではありません—私は多くのことを行う開発者なので、ご容赦ください。 バックアップを復元することもできますが、クラッシュを防ぐ方法はあると思います。 これらのテーブルはutf8_general_ciであり、MyISAMを使用しています。 MySQLテーブルがクラッシュするのはなぜですか?これを防ぐにはどうすればよいですか?
9 mysql  myisam 

4
MySQLが非常に多くの一時MYDファイルを生成するのはなぜですか?
多くのPHP / MySQL Webサイト(フォトギャラリー)をホストしているDebian Linuxサーバーでは、のような「多数の」ファイルがある場合があります/tmp/#sql_6405_58.MYD。 たとえば、今日: [2012-12-15 15:18:11] /tmp/#sql_6405_6.MYD : 88MB [2012-12-15 15:18:11] /tmp/#sql_6405_3.MYD : 22MB [2012-12-15 15:18:11] /tmp/#sql_6405_4.MYD : 138MB [2012-12-15 15:18:11] /tmp/#sql_6405_10.MYD : 88MB ... [2012-12-15 15:18:11] /tmp/#sql_6405_9.MYD : 15MB [2012-12-15 15:18:11] /tmp/#sql_6405_65.MYD : 49MB [2012-12-15 15:18:11] /tmp/#sql_6405_44.MYD : 69MB (同時に59ファイル、6GB以上の場合...はい/ tmpの大きなファイルを監視します) 残念ながら、/tmpと同じパーティション上に/あり、一時的にWebサーバーが壊れ/ます。その後、ファイルが消え、サーバーは通常の状態に戻ります。 すべてのファイル名は#sql_6405_*.MYDパターンに従います。どのMySQL操作が非常に多くの一時ファイルを意味するのかを理解したいと思います。このサーバーには約2000のデータベースがあります。どのデータベースが関係しているかを知ることは可能ですか?

2
MySQL SELECTステートメントのTIMESTAMPフィールドのWHERE条件の最適化
使用時間を追跡する分析システムのスキーマに取り組んでいます。特定の日付範囲の合計使用時間を確認する必要があります。 簡単な例を挙げると、このタイプのクエリは頻繁に実行されます。 select sum(diff_ms) from writetest_table where time_on > ("2015-07-13 15:11:56"); 通常、このクエリは、データが密集しているテーブルで約7秒かかります。約3,500万行、Amazon RDS(db.m3.xlarge)で実行されているMySQLのMyISAMがあります。 WHERE句を削除すると、クエリの所要時間がわずか4秒になり、2番目の句(time_off> XXX)を追加すると、さらに1.5秒追加され、クエリ時間が8.5秒になります。 私はこれらのタイプのクエリが一般的に行われることを知っているので、それらをより速く、理想的には5秒未満に最適化したいと思います。 私はtime_onにインデックスを追加することから始めましたが、WHERE "="クエリは大幅に高速化しましたが、 ">"クエリには影響がありませんでした。WHERE ">"または "<"クエリを高速化するインデックスを作成する方法はありますか? または、このタイプのクエリのパフォーマンスについて他に提案がある場合は、お知らせください。 注:「diff_ms」フィールドを非正規化ステップとして使用しています(time_off-time_onと同じです)。これにより、集約のパフォーマンスが約30%から40%向上します。 私はこのコマンドでインデックスを作成しています: ALTER TABLE writetest_table ADD INDEX time_on (time_on) USING BTREE; (「time_on>」を使用して)元のクエリで「explain」を実行すると、time_onは「possible_key」であり、select_typeは「SIMPLE」です。「追加」の列は「使用場所」を示し、「タイプ」は「すべて」です。インデックスが追加された後、テーブルは「time_on」が「MUL」キータイプであることを示しています。これは、同じ時間が2回存在する可能性があるため、正しいように見えます。 これがテーブルスキーマです: CREATE TABLE `writetest_table` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `sessionID` int(11) DEFAULT NULL, `time_on` …

2
MySQLがシリアル同期I / Oを行うのはなぜですか?
何度も実行するのに長い時間がかかるMyISAMテーブルで特に厄介なクエリを見ると、MySQLはかなり奇妙なI / Oパターンを公開しているように見えることに気づきました。 I / Oの量(たとえば、テーブルスキャンの場合、または結果としてキャッシュが空にecho 3 > /proc/sys/vm/drop_cachesなるため、最初にインデックスをディスクからロードする必要がある場合)、基礎となるブロックデバイスのキューサイズは値1に近く、パフォーマンスは非常に低いわずか4〜5 MB /秒: root@mysql-test:~# iostat -xdm 5 /dev/sda Linux 3.2.0-40-generic (mysql-test) 04/30/2014 _x86_64_ (4 CPU) Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.14 24.82 18.26 88.79 0.75 4.61 102.56 2.83 26.39 19.29 27.85 2.46 …

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/

1
MySQLの起動/停止
次のコマンドラインを実行するとどうなるかを理解するための助けを求めています。 root@prodn$ service mysqld stop はい、それはMySQLサーバーをシャットダウンするので、サービスが再開されるまで、そのサーバーへのアクセスは利用できなくなります。しかし、より具体的には、サービスが停止したときに何か他に起こることはありますか?ここで私の初心者を許しますが、mysqldが再起動すると、ログがフラッシュされた、一部のメモリが解放された、キャッシュが空になったなどのことを意味しますか? 私が尋ねる理由は次のとおりです: 私たちのデータウェアハウスDBはMySQL DBであり、過去4か月で、平均8.5時間かかりました。 先週の水曜日に、mysqlサービスを停止し、30分後に再起動しました。それ以来、全体的なパフォーマンスの大幅な改善に気づき始めました。SELECT/ INSERT / UPDATE / DELETEプロセスの方が効率的でした。DWは同じ数のデータ行でほぼ4時間早く終了しました ただし、1日が経過するごとに、終了時間に15〜20分が追加されます。だから、私は毎週サービスを再開する必要があるのではないかと思います。 この動作の説明はありますか?関連する他の質問はわかりませんが、mysqldサービスの再起動時に何が起こるかを知ることはすばらしいでしょう。 誰かこれに光を当てることができますか?


2
挿入が多いInnoDBテーブルがCPUをすべて使用しない
パケットログデータベースを持っていますが、ほとんど照会されません。挿入時に高速である必要があります。ACIDコンプライアンスを維持したいので、InnoDBを使用しています。1つのパケットを失うだけでも、お客様に損害を与える可能性があるからです。パフォーマンス調整シナリオでは、複数のDB接続を介して1,000,000パケットをサーバーに送信します。しかし、my.cnfでどの設定を使用しても、12コアのシステムでmysqldプロセスが900%を超えるCPUを使用することはできません。(ボックスでは他に何も実行されていません。) 以下を設定しました innodb_file_per_table = 1 innodb_write_io_threads = 64 innodb_read_io_threads = 64 innodb_thread_concurrency = 0 MyISAMを使用すると、すべてのパケットを約6秒で書き込むことができます。しかし、InnoDBは約25必要です。MySQLに残りのシステムリソースを使用させ、より速く挿入できますか? 編集:これはテーブルのスキーマです: +-------+----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+----------------------+------+-----+---------+-------+ | t | bigint(20) unsigned | YES | | NULL | | | a | char(1) | YES | …

2
MyISAMおよびInnoDBエンジンを使用するデータベースの一貫した論理バックアップ
MyISAMとInnoDBの両方を使用するMySQLデータベースの論理バックアップについて質問があります。 mysqldumpユーティリティは、これらの2つのオプションがサポートされています。 --single-transaction-すべてのテーブルを単一のトランザクションでダンプすることにより、一貫したスナップショットを作成します。マルチバージョニングをサポートするストレージエンジンに格納されているテーブルに対してのみ機能します(現在はInnoDBのみがサポートしています)[...]オプションは自動的に--lock-tablesをオフにします。 -x、-lock-all-tables-すべてのデータベースのすべてのテーブルをロックします。これは、ダンプ全体の期間中、グローバルな読み取りロックをとることによって実現されます。--single-transactionと--lock-tablesを自動的にオフにします。 InnoDBには、 --single-transaction MyISAMには、lock-tablesまたはlock-all-tablesが必要です(データベース間の整合性が必要な場合)。 それでは、ハイブリッドデータベース(MyISAMエンジンとInnoDBエンジンの両方を使用するデータベース)はどのようにバックアップされることになっていますか? 編集: 明確にするために、質問は次のように再定式化できます。 lock- [all-] tablesオプションはInnoDBテーブルの一貫したバックアップを保証しますか?

1
MySQLはまだこの方法でインデックスを処理しますか?
MySQLで重複したインデックスを削除するのにはかなり時間がかかりました。そのため、私が待っていたときにそれについて検索し、MySQLがどのように処理し、インデックスを作成するかについて話している2006年のこの投稿を見つけました。ADDDROP テーブルTが4つのインデックス(ndx1、ndx2、ndx3、ndx4)を持つMySQLテーブルであり、「テーブルTをドロップインデックスndx3に変更」したい場合。ここでは、内部で何が起こるかを正確に示します。 1)MySQLはT.MYDを一時テーブル、つまりS.MYDとゼロバイトのS.MYIにコピーします。2)MySQLは「テーブルSを変更し、インデックスndx1(...)を追加します。3)MySQLは「テーブルSを変更し、インデックスndx2(...); 4)MySQLはテーブルSを変更し、インデックスndx4(...)を追加します。5)MySQLはT.MYDを削除してT.MYIを削除します6)MySQLはS.MYDをT.MYDに名前変更し、S.MYIをT.MYIに名前変更します これはまだ本当ですか?彼のアドバイスはまだ有効ですか? 同じMyISAMテーブルTに4つのインデックス(ndx1、ndx2、ndx3、ndx4)があり、「テーブルTドロップインデックスndx3を変更する」とします。代わりにこれを試してください: 1)TのようなテーブルT1を作成します。これにより、ndx1、ndx2、ndx3、およびndx4のインデックスを持つ空のテーブルT1が作成されます。2)テーブルT1ドロップインデックスndx3を変更します。これにより、空であるT1のインデックスndx3が削除されます。3)T1に挿入* Tから選択します。これにより、テーブルTにデータが読み込まれ、T1の3つすべてのインデックスが1つのパスで読み込まれます。4)ドロップテーブルテーブルT; 5)テーブルT1の名前をTに変更します。 大きなテーブルでのインデックスの追加と削除をどのように処理しますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.