linux +mysql
要写一个脚本 , 每2分执行一次
每次要执行一个mysql 的sql语句  mysql -uroot -pdd  db  -e"show innodb status"
现在发现该语句的内容实在太多 我只要关于错误和dead lock的一部分(这一部分很小的)我记得有show innodb status \G可以看某一部分的, 问加设么参数可以仅仅看
------------------------
LATEST FOREIGN KEY ERROR
------------------------
100810  6:44:31 Transaction:
TRANSACTION 0 2323275062, ACTIVE 0 sec, process no 3591, OS thread id 1171503424 inserting, thread declared inside InnoDB 500
mysql tables in use 1, locked 1
3 lock struct(s), heap size 368, undo log entries 1
MySQL thread id 167874, query id 974347806 10.0.4.149 lh update
INSERT INTO `event` (`id`,`categoryId`,`name`) VALUES ('1','1','1')
Foreign key constraint fails for table `test2/event`:
,
  CONSTRAINT `fk_categ_event` FOREIGN KEY (`categoryId`) REFERENCES `category` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
Trying to add in child table, in index `IDX_EVENT_categoryId` tuple:
DATA TUPLE: 2 fields;
 0: len 4; hex 80000001; asc     ;; 1: len 4; hex 80000001; asc     ;;But in parent table `test2/category`, in index `PRIMARY`,
the closest match we can find is record:
PHYSICAL RECORD: n_fields 5; compact format; info bits 0
 0: len 4; hex 800003e8; asc     ;; 1: len 6; hex 000052d28264; asc   R  d;; 2: len 7; hex 800000003f0110; asc     ?  ;; 3: len 6; hex 6d7963617465; asc mycate;; 4: len 4; hex 80000064; asc    d;;------------------------
LATEST DETECTED DEADLOCK
------------------------
100820 10:35:17
*** (1) TRANSACTION:
TRANSACTION 0 3109908673, ACTIVE 1 sec, process no 3591, OS thread id 1175230784 starting index read
mysql tables in use 1, locked 1
LOCK WAIT 5 lock struct(s), heap size 1216
MySQL thread id 287225, query id 2051189564 10.0.4.248 betbrain Searching rows for update
update Event_history set isLatest='N', isHistory='Y' where  isLatest='Y' and id in(186700312,186688919)
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 0 page no 1207786 n bits 800 index `idx_EH_id_isLatest` of table `oddsmatrixdb_dev/Event_history` trx id 0 3109908673 lock_mode X waiting
Record lock, heap no 691 PHYSICAL RECORD: n_fields 3; compact format; info bits 32
 0: len 8; hex 000000000b20d218; asc         ;; 1: len 1; hex 59; asc Y;; 2: len 6; hex 00005417de1e; asc   T   ;;
也就是如何只要输出的上面部分   (他的输出实在过多,导致邮件过大,  我设计每2分发一次邮件)

解决方案 »

  1.   

    试试加上 like '%lock%'show innodb status  like '%lock%'
      

  2.   

    mysql> show innodb status like '%lock%';
    ERROR 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'like '%lock%'' at line 1
    错误
      

  3.   

    现在的方法是 用linux的文本来处理先导出到一个文件
    之后用文件命令取LATEST FOREIGN KEY ERRORLATEST DETECTED DEADLOCK
    这2部分临近的内容不知道哦还有其他方法没有
      

  4.   

    ySQL: SHOW INNODB STATUS 详解(二)
    2007年12月18日 星期二 20:30当前活跃的事务:如果连接数量很大,InnoDB只能打印出其中的一部分,以维持整个列表的长度。Transaction id是当前事务的标识符。Purge done for trx's n:o是回收程序启动事务的数量。如果回收程序没有运行事务,InnoDB只能回收旧版本。旧的未提交事务可能会阻塞回收进程而吃掉资源。通过查看当前事务数和最近一次回收事务数的差值就可以发现这个问题。在某些情况下,回收程序效率很低而要维持更新率,在这种情况下差值也会增加,这时innodb_max_purge_lag会有所帮助。"undo n:o"显示回收程序正在处理的undo日志记录数,如果当前没有回收程序运行,则该值为0。History list length是在回滚段中为回收的事务数。当更新事务提交时该值增加,当回收线程运行时该值减少。Total number of lock structs in row lock hash table是所有事务分配的行锁结构数。该值并不等于锁住的行数-因为一个锁结构中包含很多行。MySQL的连接要么是not started状态(该连接没有活动的事务),要么是ACTIVE状态(有活动事务)。注意,尽管连接是"SLEEP"状态,但事务也可以是活跃的-如果事务中有多个语句。事务状态就是事务正在做什么,如"fetching rows","updating"。"Thread declared inside InnoDB 400"意思是线程正在InnoDB内核中运行,当前还可以有400个线程可以进来。InnoDB限制内核中的并发线程数使用变量innodb_thread_concurrency 。如果线程没在InnoDB内核中运行,状态应该是"waiting in InnoDB queue" 或"sleeping before joining InnoDB queue"。为避免太多线程竞争进入InnoDB队列,InnoDB有时会让线程先sleep,而不是wait。这样就会使InnoDB内核中的活跃线程少于innodb_thread_concurrency。这会减少线程等待进入队列的时间,可以调整innodb_thread_sleep_delay的值,该值为微秒。mysql tables in use 1, locked 0是由线程正使用的表数,和线程锁住的表数。InnoDB一般不会锁表,因此该值一般为0,除非ALTER TABLE或LOCK TABLES相似的操作。文件I/O:   1.
          --------
       2.
          FILE I/O
       3.
          --------
       4.
          I/O thread0state: waiting for i/o request(insert buffer thread)
       5.
          I/O thread1state: waiting for i/o request(log thread)
       6.
          I/O thread2state: waiting for i/o request(read thread)
       7.
          I/O thread3state: waiting for i/o request(write thread)
       8.
          Pending normal aio reads:0, aio writes:0,
       9.
          ibuf aio reads:0, log i/o's: 0, sync i/o's:0
      10.
          Pending flushes(fsync)log:0; buffer pool:0
      11.
          17909940OS file reads,22088963OS file writes,1743764OS fsyncs
      12.
          0.20reads/s,16384avg bytes/read,5.00writes/s,0.80fsyncs/sIO的四个进程(括号中的名字)。插入缓存合并,异步日志刷新,read-ahead和脏缓存刷新。如果线程准备好了则为waiting for i/o request状态,否则它就正在执行某种操作。Number of pending operation is shown for each of helper threads - these are amount of operations queued for execution or being executed at the same time. Also number of pending fsync operations is displayed. For writes Innodb has to ensure data makes it to the disk - just passing it to OS cache is not enough. This is typically done by calling fsync() for modified files. Constant high values for any of these variables is indication of IO bound workload. Note however - IO requests submited by threads executing requests are not accounted here so you may have these at zeroes while workload being IO bound still.Next, number of file IO operations is shown as well as computed averages. This is parameters which is great for graphing and monitoring.
    "16384 avg bytes/read"shows average size of read requests. For random IO these should be 16K - page size, for full table scan or index scan read-ahead may be performed which can increase average read size significantly. So you can think about this value as read-ahead efficiency.
    PLAIN TEXT
    CODE:   1.
          -------------------------------------
       2.
          INSERT BUFFER AND ADAPTIVE HASH INDEX
       3.
          -------------------------------------
       4.
          Ibuf for space0: size1, free list len887, seg size889, is not empty
       5.
          Ibuf for space0: size1, free list len887, seg size889,
       6.
          2431891inserts,2672643merged recs,1059730merges
       7.
          Hash table size8850487, used cells2381348, node heap has4091buffer(s)
       8.
          2208.17hash searches/s,175.05non-hash searches/sThis section shows insert buffer and adaptive hash status. First line shows status of insert buffer - segment size and free list as well as if
    there are any records is insert buffer. Next it shows how many inserts were done in insert buffer, how many recs were merged and how many merges did it took. Ratio of number of merges to number of inserts is pretty much insert buffer efficiency.Adaptive hash index is hash index Innodb builds for some pages to speed up row lookup replacing btree search with hash search. This section shows hash table size, number of used cells and number of buffers used by adaptive hash index. You can also see number of hash index lookups and number of non-hash index lookups which is indication of hash index efficiency.There is currently not much you can do to adjust adaptive hash index or insert buffer behavīor so it is pretty much for informational purposes only.
    PLAIN TEXT
    CODE:   1.
          ---
       2.
          LOG
       3.
          ---
       4.
          Log sequence number843000620880
       5.
          Log flushed up to843000611265
       6.
          Last checkpoint at842939889199
       7.
          0pending log writes,0pending chkp writes
       8.
          14073669log i/o's done, 10.90 log i/o's/secondLog section provides information about log subsystem of Innodb. You can see current log sequence number - which is amount of bytes Innodb has written in log files since system tablespace creation. You can also see up to which point logs have been flushed - so how much data is unflushed in log buffer as well as when last checkpoint was performed. Innodb uses fuzzy checkpointing so this line hold log sequence, all changes up to which has been flushed from buffer pool. Changes having higher log sequences may still only be recored in logs and not flushed from buffer pool so such log sequences can't be overwritten in log files. By monitoring log sequence number and value up to which logs have been flushed you can check if yourinnodb_log_buffer_sizeis optimal - if you see more than 30% of log buffer size being unflushed you may want to increase it.You also can see number of pending normal log writes and number of checkpoint log writes. Number of log/io operations allows to separate tablespace related IO from log related IO so you can see how much IO your log file requires. Note depending on yourinnodb_flush_log_at_trx_commitvalue your log writes may be more or less expensive. If innodb_flush_logs_at_trx_commit=2 log writes are done to OS cache, and being sequential writes these logs writes are pretty fast.
    PLAIN TEXT
    CODE:   1.
          ----------------------
       2.
          BUFFER POOL AND MEMORY
       3.
          ----------------------
       4.
          Total memory allocated4648979546; in additional pool allocated16773888
       5.
          Buffer pool size262144
       6.
          Free buffers0
       7.
          Database pages258053
       8.
          Modified db pages37491
       9.
          Pending reads0
      10.
          Pending writes: LRU0, flush list0, single page0
      11.
          Pages read57973114, created251137, written10761167
      12.
          9.79reads/s,0.31creates/s,6.00writes/s
      13.
          Buffer pool hit rate999/1000该部分描述了内存的使用情况。包括的信息有:InnoDB分配的总内存,额外分配的内存,缓存池中的页数,空闲页数,数据库页和脏页数。从这些值中 可以看出是否InnoDB缓存分配得恰当-如果总有很多空闲页,表明数据库要比内存小,可以把innoDB缓存调小些。如果空闲页为0,那么数据库页不会 和缓存容量相同,因为还要存锁、索引和其他得系统结构。Pending reads and writes are pending requests on buffer pool level. Innodb may merge multiple requests to one on file level so these are different. We can also see different types of IO submited by Innodb - pages to be flushed via LRU pages - dirty pages which were not accessed long time, flush list - old pages which need to be flushed by checkpointing process and single page - independent page writes.We can also see number of pages being read and written. Created pages is empty pages created in buffer pool for new data - when previous page content was not read to the buffer pool.Finally you can see buffer pool hit ratio which measures buffer pool efficiency. 1000/1000 corresponds to 100% hit rate. It is hard to tell what buffer pool hit rate is good enough - it is very workload dependent. Sometimes 950/1000 will be enough, sometimes you can see IO bound workload with hit rate of 995/1000.
    PLAIN TEXT
    CODE:   1.
          --------------
       2.
          ROW OPERATIONS
       3.
          --------------
       4.
          0queries inside InnoDB,0queries in queue
       5.
          1read views open inside InnoDB
       6.
          Main thread process no.10099, id88021936, state: waiting for server activity
       7.
          Number of rows inserted143, updated3000041, deleted0, read24865563
       8.
          0.00inserts/s,0.00updates/s,0.00deletes/s,0.00reads/sFinally last section - row operations which shows activity on the row basics and some system information.It shows innodb thread queue status - how many threads are waiting and being active. How many read views are open inside Innodb - this is when transaction was started but no statement is currently active, state of Innodb main thread which controls scheduling of number of system operations - flushing dirty pages, checkpointing, purging, flusing logs, doing insert buffer merge. Values for"state"field are rather self explanatory.You can also see number of rows operation since system startup as well as average values. This is also very good values to monitor and graph - row operations is very good measure of Innodb load. Not all row operations are created equal of course and accessing of 10 byte rows is much cheaper than accessing 10MB blog, but it is still much more helpful than number of queries, which is even more different.One more thing to note - SHOW INNODB STATUS is not consistent - it does not correspond to some particular point in time. Different lines in SHOW INNODB STATUS populated in different point in times, so sometimes you may see a bit conflicting information. This is by design as requiring global lock to provide consitent information would cause significant overhead.http://www.51testing.com/?uid-199-action-viewspace-itemid-76741