yokuさん

広江です。
お忙しい中、ご指摘、参考URLなど本当にありがとうございます。

mysql> SHOW ENGINE INNODB STATUS\G
はload data中に実行して、みてみるということですよね?
やってみます。

O_DIRECTも見逃していました。
これもやってみます。O_DIRECTについて資料を読んだところメモリの半分はbufferpoolに
割り当てているので有効なかんじがします。

「漢のコンピュータ道」はちょくちょく読んでいましたが
このページは見ていなくて、読んだところ見逃していた点がいくつかあります。

施策がなくなっていたところなので大変ありがたいです。
ありがとうございます。


2013年7月31日 20:18 yoku ts. <yoku0825@gmail.com>:
広江さん、こんばんは。

結構食いきられているのですね。。
InnoDBログは引き剥がされていませんか?

mysql> SHOW ENGINE INNODB STATUS\G
..
---
LOG
---
Log sequence number 10965497616
Log flushed up to   10965497616
Last checkpoint at  10965497616
..

(Log sequence number) - (Last checkpoint at)が3GiBに近付いているようだと、
チェックポイントで世界が止まっているかも知れません
(現在の広江さんの設定では、この値が3GiBに到達すると更新動作が全てブロックされます)

加えてinnodb_flush_method= O_DIRECTとすると、ファイルシステムでダブルキャッシュされなくなりメモリが有効に使えるかも知れません。

他にもロード時間を短縮するためのオプションを奥野さんが詳しく解説されていますので、ご参考までに。
http://nippondanji.blogspot.jp/2010/03/innodb.html


yoku ts.

2013年7月31日 16:52 ayako hiroe <roeaya03@gmail.com>:
> yokuさん 大垣さん
> ご返信ありがとうございます。
> 広江です。
>
> メモリは32GB積んでいて、バッチ動かす前は使用メモリが18GBぐらいなのが
> バッチ実行後2時間ほどで32GBフル+スワップ100MBほど使っているようです。
>
> Linuxの場合、スワップ発生は当然と思っていましたが認識が間違っているのでしょうか。
> 現在innotopをインストールして情報を集めようと、見方を調べているところです。
>
> yokuさん
> なるほどです、
> innodb_buffer_pool_size は19G->16Gに下げ
> innodb_log_buffer_size を8M->64Mにあげてやってみようと思います。
>
>
> 大垣さん
> 「mysqlをデバッグビルド」というのはもしやC言語の知識が必要でしょうか?
> 勉強不足でおはずかしい限りですが。
> プロセスをps -efでみると
> mysqld <defunct>になっていてkillしてもスルーされゾンビでした。
>
>
>
>
>
>
>
> 2013年7月31日 15:45 Yasuo Ohgaki <yohgaki@ohgaki.net>:
>
>> 大垣です。
>>
>> 他の方が指摘されているようにメモリが足りないのかも知れませんが、
>> 本当にハングしているならmysqlをデバッグビルドしてgdbでアタッチ
>> して調べると原因が分かると思います。
>>
>> --
>> Yasuo Ohgaki
>> yohgaki@ohgaki.net
>>
>>
>> 2013/7/30 ayako hiroe <roeaya03@gmail.com>
>>>
>>> お世話になります。
>>> 広江彩子と申します。
>>>
>>> サーバー移行のため数億件のレストアテストをしております。
>>> 300万件ずつのtab区切りプレインテキストのダンプを
>>> バッチで何度もload infeを繰りかえしているうちmysqldが突然ハングします。
>>>
>>> ハングの具体的な現象は
>>> ・load中のCPU使用率からすると突然それが下がる
>>> ・mysql関連のコマンドがすべてハング(killするしかない)
>>> ・mysqladmin shutdownもハング
>>> ・mysqldのスクリプトを実行してもハング
>>>
>>> 上記のような状態になると結局killallなどするしかありません。
>>> エラーログはハングの時点では何も吐いていません。
>>> killallでmysqldのプロセスを停止するので、システムをリブートしてmysqld startするときに
>>> リカバリ・ロールバックプロセスががんがん走るのをエラーログが吐いているようになります。
>>>
>>> バッチをまわし始めるとだんだん使用メモリが増え、しばらくするとスワップが発生します。
>>> それが原因かもわかりません。
>>> innodb使用です。
>>>
>>> 何かお気づきの方がおられましたら
>>> ご教授いただけますと幸いです。
>>>
>>>
>>>
>>> OS:
>>> Linux CentOS release6.4
>>>
>>> MySQL:
>>> MySQL 5.5.32 Remi
>>>
>>> ロケール:
>>> utf8
>>>
>>> my.cnf
>>>
>>> [mysqld]
>>> innodb_file_per_table
>>> back_log = 50
>>> max_connections = 500
>>> max_connect_errors = 10
>>> table_open_cache = 2048
>>> max_allowed_packet = 16M
>>> binlog_cache_size = 1M
>>> max_heap_table_size = 64M
>>> read_buffer_size = 512M
>>> read_rnd_buffer_size = 1M
>>> ted per thread if sort is needed.
>>> sort_buffer_size = 8M
>>> join_buffer_size = 8M
>>> thread_cache_size = 180
>>> thread_concurrency = 8
>>> query_cache_size = 64M
>>> query_cache_limit = 2M
>>>
>>> ft_min_word_len = 4
>>>
>>> default-storage-engine = InnoDB
>>> thread_stack = 192K
>>> transaction_isolation = REPEATABLE-READ
>>> tmp_table_size = 64M
>>>
>>> binlog_format=mixed
>>> slow_query_log
>>> log-error=/var/log/myerror.log
>>> log-warnings=1
>>> long_query_time = 120
>>> key_buffer_size = 32M
>>> bulk_insert_buffer_size = 64M
>>> myisam_sort_buffer_size = 128M
>>> myisam_max_sort_file_size = 10G
>>> myisam_repair_threads = 1
>>>
>>> myisam_recover
>>> innodb_io_capacity=2000
>>> innodb_additional_mem_pool_size = 16M
>>> innodb_buffer_pool_size = 19G
>>>
>>> innodb_data_file_path = ibdata1:10M:autoextend
>>> innodb_write_io_threads = 8
>>> innodb_read_io_threads = 8
>>> innodb_thread_concurrency = 16
>>>
>>> innodb_flush_log_at_trx_commit = 1
>>> innodb_log_buffer_size = 8M
>>>
>>> innodb_log_file_size = 1G
>>> innodb_log_files_in_group = 3
>>>
>>> innodb_max_dirty_pages_pct = 90
>>> innodb_lock_wait_timeout = 120
>>>
>>>
>>> [mysqldump]
>>> quick
>>>
>>> max_allowed_packet = 16M
>>> default-character-set=utf8
>>>
>>> [mysql]
>>> no-auto-rehash
>>>
>>> # Only allow UPDATEs and DELETEs that use keys.
>>> #safe-updates
>>> default-character-set=utf8
>>>
>>> [myisamchk]
>>> key_buffer_size = 512M
>>> sort_buffer_size = 512M
>>> read_buffer = 8M
>>> write_buffer = 8M
>>>
>>> [mysqlhotcopy]
>>> interactive-timeout
>>>
>>> [mysqld_safe]
>>> open-files-limit = 8192
>>>
>>
>