Routing Statements with MaxScale's Read/Write Split Router
This page is part of MariaDB's Documentation.
The parent of this page is: Read/Write Split Router
Topics on this page:
Overview
The Read/Write Split Router (readwritesplit) uses well-defined rules to determine whether a statement can be routed to a replica server, or whether it needs to be routed to the primary server. Application designers must understand these rules to ensure that the router can properly load balance queries.
Statements Routed to the Primary Server
The following statements are routed to the primary server:
Queries that write to the database.
For example, this includes, but is not limited to, the following statements:
Queries that modify the database (DDL)
For example, this includes, but is not limited to, the following statements:
Queries within open transactions
If the application uses explicit transactions, then all queries within the transaction will be routed to the primary server.
Explicit transactions are used in the following cases:
When autocommit is set to
OFF
.When BEGIN is executed.
When
is executed.
For example, all queries will be routed to the primary server in this case:
SET SESSION autocommit=OFF; SELECT * FROM hq_sales.invoices WHERE branch_id=1; INSERT INTO hq_sales.invoices (customer_id, invoice_date, invoice_total, payment_method) VALUES (1, '2020-05-10 12:35:10', 1087.23, 'CREDIT_CARD'); COMMIT;
And all queries will also be routed to the primary server in this case:
BEGIN; SELECT * FROM hq_sales.invoices WHERE branch_id=1; INSERT INTO hq_sales.invoices (customer_id, invoice_date, invoice_total, payment_method) VALUES (1, '2020-05-10 12:35:10', 1087.23, 'CREDIT_CARD'); COMMIT;
Queries using stored procedures
Queries using stored functions
Queries using user-defined functions (UDF)
Queries that use temporary tables
statements that execute prepared statements
Statements Routed to a Replica Server
The following statements are routed to a replica server:
Queries that are read-only
For example, this includes, but is not limited to, the following statements:
Queries that read system or user-defined variables
For example, the following queries would be routed to a replica:
SELECT @@global.alter_algorithm; select @@my_user_var;
SHOW
statementsFor example, this includes, but is not limited to, the following statements:
Queries using
Statements Routed to All Servers
The following statements are routed to all servers:
statements, including those embedded in read-only statements
statements
statements that create prepared statements
Internal client commands, such as
QUIT
,PING
,STMT RESET
, andCHANGE USER
.