经常出现这样的情况:(用show processlist查看)
0.正在执行:create index for temp_table(需要很长时间)
1.正在执行:select from table1(需要很长时间)
2.locked: update table1 
3.4.5.6.7.8.9....locked: select from table*连接2被lock是可以理解的。但后面的连接被locked就很难理解了。似乎只要有update操作被锁定,其他的所有操作都被锁定,无论涉及的表是否相同,结果就象是单线程运行一样,在一个时间点,总是只有1个连接是活动的。特别地,有连接0的时候,很容易就出现这种情况。也就是说,如果有一个连接更新表需要很长时间,就很容易导致整个数据库单线程运行。有别的人遇到这种情况吗?请问有解决办法吗?

解决方案 »

  1.   

    看你的这个表是什么引擎了。MYISAM表是表级别的锁。INNODB是行级别的锁。其他的看手册。
    所以如果是MYISAM。如果一个表被UPDATE,或者SELECT,其他的操作必须等待这个完成才能操作。其他类型的表以此类推。
      

  2.   

    我看你这问题还不是一般的麻烦,,mysql是一个总端对多个client的数据库,一般locked的时间会很短
      

  3.   

    造成的后果就是整个数据库象单线程运行一样,同一个时间只执行一个sql,其他全都locked.无论这些sql之间有没有相关性。