The concurrency of statement execution on tables is handled
differently in Maria
depending on whether you
are using non-transactional or transactional tables.
For non-transactional tables, the rules are identical to MyISAM:
All issued SELECT
's are running
concurrently. While a SELECT
is
running, all writers (INSERT
,
DELETE
,
UPDATE
) are blocked from using
any of the used tables (that is, they wait for the table to be
free before continuing) . The only exception is that one
INSERT CONCURRENT
can be run on each table
that doesn't have any deleted rows.
Only one UPDATE
statement can
run at the same time on each table. While the
UPDATE
is running all other
threads are blocked from using this table.
Only one DELETE
statement can
run at the same time on each table. While the
DELETE
is running all other
threads are blocked from using this table.
If INSERT CONCURRENT
is used, and there are
no deleted rows in the table, only one INSERT
CONCURRENT
statement can run at the same time on
each table. While the INSERT CONCURRENT
is
running all other writer threads are blocked for using this
table. Any number of SELECT
statements can use this table.
If normal INSERT
is used or if
there are deleted rows in the table, only one INSERT statement
can run at the same time on the table. While the
INSERT
is running all
SELECT
,
INSERT
,
DELETE
and
UPDATE
are blocked from using
this table.
CREATE
or DROP
CREATE
's on different tables can be run
concurrently. On the same table, first creator wins.
DROP
waits until all statements using the
tables are completed, after which the table is dropped.
When using transactional tables, Maria
supports
a single writer and multiple readers. The single writer supports
both INSERT
and
UPDATE
operations.
All issued SELECT
's are running
concurrently. While a SELECT
is
running, all writers (INSERT
,
DELETE
,
UPDATE
) are blocked from using
any of the used tables (ie, they wait for the table to be free
before continuing).
As part of the single writer, only one
UPDATE
statement can run at the
same time on each table. While the
UPDATE
is running all other
threads using UPDATE
or
INSERT
are blocked from using
this table.
As part of the single writer, only one
INSERT
statement can run at the
same time on the table. While the
INSERT
is running all other
threads using UPDATE
or
INSERT
are blocked from using
this table.
Only one DELETE
statement can
run at the same time on each table. While the
DELETE
is running all other
threads are blocked from using this table.
CREATE
or DROP
CREATE
operations on different tables can
be run concurrently. On the same table, first creator wins.
DROP
waits until all statements using the
tables are completed, after which the table is dropped.
Starting with MySQL 5.1.27-maria, multiple concurrent
INSERT
statements are supported,
with the following notes:
To use multiple writers you should lock tables using the statement:
LOCK TABLES table_name
WRITE CONCURRENT
During multiple write operations, all
SELECT
statements operate in
REPEATABLE READ
mode.
All INSERT
statements are
considered atomic, and will use concurrent insert locks to
ensure consistency.
Concurrent inserts are not supported on:
Non-transactional tables.
Transactional tables that have GIS (spatial) or
FULLTEXT
indexes.
Empty tables.
User Comments
Add your own comment.