MyISAM Selects only insert locks within a procedure

We have a large MyISAM table in which rows will only be inserted at the bottom of the table.

When performing some tests, I realized that selects do not (always) block other inserts into the same table. However, when inserts come from a stored procedure / function, they will be locked by selection.

Why is this?

To demonstrate this behavior:

CREATE TABLE Foo (
   ID INT NOT NULL AUTO_INCREMENT,
   Bar VARCHAR(200),
   PRIMARY KEY(ID)) ENGINE=MyISAM;

--INSERT into Foo 10M rows


DELIMITER $$

DROP PROCEDURE IF EXISTS InsertProc$$

CREATE PROCEDURE InsertProc(IN vBar VARCHAR(255))
BEGIN
    INSERT Foo(Bar) VALUES (vBar);
END$$

DELIMITER ;

Run the following query:

SELECT Count(*) FROM Foo WHERE INSTR(Bar, 'abcdefg') > 0;

While this selection is running, open a new connection and run the following insert request:

INSERT Foo(Bar) VALUES ('xyz1234');

The insert will start and return immediately. However, if I run the following query:

CALL InsertProc('xyz1234');

Now the request is blocked and waiting for the selection to complete.

MySql Version: 5.0.51 runs on Window Server 2K3

Thank.

- UPDATE Here is the profile output:

Insert Direct:

(initialization)     0.0000432
checking permissions 0.0000074
Opening tables       0.0000077
System lock          0.0000032
Table lock           0.0000025
init                 0.000021
update               0.0002365
end                  0.0000382
query end            0.000002
freeing items        0.0000057
closing tables       0.0000022
logging slow query   0.0000005

Insert using procedure:

(initialization) 0.0000285
Opening tables   0.0004325
System lock      0.0000022
Table lock       0.0002957
checking permissions 0.0000047
Opening tables   0.000004
System lock      0.0000017
Table lock       3.2365122
init             0.0000422
update           0.000251
end              0.0000025
query end        0.000003
closing tables   0.00004
query end        0.0000074
freeing items    0.0000074
logging slow query 0.000001
cleaning up      0.5790915

" " ?

+5
3

MyIASM - ? InnoDB .

+1

: , / AUTO_INCREMENT MyISAM , .

, , ID AUTO_INCREMENT?

INSERT DELAYED , ?

0

All Articles