【发布时间】:2021-05-04 10:28:22
【问题描述】:
我们尝试从 MySQL 5.0.96 切换到 MariaDB 10.5.9。将数据移动到 MariaDB 服务器很容易,但问题在于 MariaDB ODBC 连接器的速度。我尝试使用没有 SSL 的默认设置的 3.1.12,而我们的应用程序(主要用 Embarcadero RAD Studio 编写)表现出非常差的性能。当我尝试 MySQL ODBC 连接器 8.0.24 时,一切运行顺利。通过 MariaDB 的连接器进行的查询慢了 3-5 倍。在一般查询日志中,我发现 MariaDB 的连接器会生成大量对 information_scheme.columns 表的查询,并反复读取变量 TX_ISOLATION。 一般查询日志的简短摘录 - MariaDB 连接器:
3 Query SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='TX_ISOLATION'
3 Prepare select * from stanice
3 Execute select * from stanice
3 Prepare SELECT TABLE_SCHEMA AS TABLE_CAT, NULL AS TABLE_SCHEM, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION KEY_SEQ, 'PRIMARY' PK_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_KEY = 'pri' AND TABLE_SCHEMA LIKE 'unicentrum' AND TABLE_NAME LIKE 'stanice' ORDER BY TABLE_SCHEMA, TABLE_NAME, ORDINAL_POSITION
3 Execute SELECT TABLE_SCHEMA AS TABLE_CAT, NULL AS TABLE_SCHEM, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION KEY_SEQ, 'PRIMARY' PK_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_KEY = 'pri' AND TABLE_SCHEMA LIKE 'unicentrum' AND TABLE_NAME LIKE 'stanice' ORDER BY TABLE_SCHEMA, TABLE_NAME, ORDINAL_POSITION
3 Close stmt
3 Reset stmt
3 Query SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='TX_ISOLATION'
3 Prepare SELECT * FROM stanice WHERE Sit_ID = ? ORDER BY Sit_ID, Podsit_ID, ID
3 Execute SELECT * FROM stanice WHERE Sit_ID = 1 ORDER BY Sit_ID, Podsit_ID, ID
3 Prepare SELECT TABLE_SCHEMA AS TABLE_CAT, NULL AS TABLE_SCHEM, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION KEY_SEQ, 'PRIMARY' PK_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_KEY = 'pri' AND TABLE_SCHEMA LIKE 'unicentrum' AND TABLE_NAME LIKE 'stanice' ORDER BY TABLE_SCHEMA, TABLE_NAME, ORDINAL_POSITION
3 Execute SELECT TABLE_SCHEMA AS TABLE_CAT, NULL AS TABLE_SCHEM, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION KEY_SEQ, 'PRIMARY' PK_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_KEY = 'pri' AND TABLE_SCHEMA LIKE 'unicentrum' AND TABLE_NAME LIKE 'stanice' ORDER BY TABLE_SCHEMA, TABLE_NAME, ORDINAL_POSITION
3 Close stmt
3 Reset stmt
MySQL 连接器:
3 Query SELECT @@tx_isolation
...
3 Query select * from stanice
3 Prepare SELECT * FROM stanice WHERE Sit_ID = ? ORDER BY Sit_ID, Podsit_ID, ID
3 Execute SELECT * FROM stanice WHERE Sit_ID = '1' ORDER BY Sit_ID, Podsit_ID, ID
3 Close stmt
我认为那些“不必要的”查询会影响这些连接器的性能。有什么想法可以加快 MariaDB 的连接器速度吗?谢谢
【问题讨论】:
-
你确定 Embarcadero RAD Studio 没有生成那种草率的代码吗?
-
我不这么认为。相同的程序和数据库服务器。我只切换了连接器。