Hi Paul,
Power, Paul C. wrote:
I have an INSERT waiting for a table lock, and i do not understand why.
---TRANSACTION 0 308691, ACTIVE 5 sec, process no 8876, OS thread id
1296547864 inserting
mysql tables in use 1, locked 1
LOCK WAIT 1 lock struct(s), heap size 320
MySQL thread id 79126, query id 1113322 bil.oneeighty.com 216.187.166.2
voxcall update
INSERT INTO voxinternal.Entity ( Entity_ID, Entity_Name, Entity_Type,
Who, Ins_Date ) VALUES ( 'OLEO', 'Ole Matadors', 'Organization', 'PYTH',
now() )
------- TRX HAS BEEN WAITING 5 SEC FOR THIS LOCK TO BE GRANTED:
TABLE LOCK table `voxinternal/Entity` trx id 0 308691 lock mode IX
waiting
------------------
The MySQL version is 5.1.7-beta-max-log
Can any one illuminate me?
I have read all documentation that i can find that appears pertinent.
Does anyone know how I may find out who already has a lock in/on the
table?
Can one find out what locks are going to be issued when some particular
piece of SQL is executed?
I don't know any way to find out what locks are going to be acquired, other than
if you are deleting or updating specific records, you can generally be sure
they will be locked. In this case you have a TABLE LOCK, not a record lock.
I'm not sure what level that happens at (MySQL server, or InnoDB storage engine).
If it's an InnoDB lock, you can use the InnoDB Lock Monitor as described in the
manual (short version: issue CREATE TABLE innodb_lock_monitor(a int)
ENGINE=InnoDB). It prints to your mysql.log file. It looks very similar to
SHOW INNODB STATUS output, except it prints all locks held, not just the locks
waited for.
I wrote a tool called innotop that can help with general monitoring
(http://sourceforge.net/projects/innotop) and some insight into locking. But
there's only so much data available to it :-) I plan to make it capable of
reading the lock monitor file I just mentioned, so you don't have to wade
through it by hand. But that's future functionality.
You can also try SHOW OPEN TABLES and see if that table is locked with a table
lock. That might give some insight.
My guess is there is a lock from LOCK TABLES on the table, otherwise it would
just be waiting to lock the gap between records (so it can insert into the gap).
Visibility into locking is my favorite gripe with MySQL -- it is very hard to
find answers to these sorts of questions.
Baron
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]