【发布时间】:2016-03-13 20:49:54
【问题描述】:
我正在将我的访问拆分数据库后端移动到 MySQL 服务器。前端启动表单运行一个 pass-trough 查询。加载启动表单需要 1.25 秒。如果没有查询,则为 0.05 秒。 在服务器端断开连接后,我尝试运行查询。查询在 1.21 秒内完成。在打开连接后运行相同的查询时,它会在 0.016 秒内完成。
看来,Access 需要 1.2 秒才能打开一个新的 ODBC 连接。有没有办法加快速度? 使用 mysqlslap 我能够每秒打开和断开 60 个连接,所以它真的不需要 1.2 秒。
配置:
- MySQL 服务器在 localhost 上运行,win 7 SP1(i5,足够的可用 RAM)。
- 客户端是 MS Access prof 2013 32 位(带有最新补丁)。
- 服务器是mysql-5.7.11-x64社区版。
- MySQL ODBC 驱动程序是 Unicode 5.3.4 版本,安装了 32 位和 64 位。
- 没有有效服务器/用户/密码的连接字符串:“ODBC;DRIVER={MySQL ODBC 5.3 Unicode Driver};SERVER=XXX;charset=UTF8;PORT=3309;DATABASE=movedb2;user=XXX;password=XXX; DFLT_BIGINT_BIND_STR=1;option=4196410"
查询:
Dim r as recordset, db as database
Set db = currentdb
Set r = db.Openrecordset(ptqueryname)
我用select 1; 尝试过,但查询仍然在 1.2 秒内完成。
【问题讨论】:
-
我们看不到您发布的代码。打开连接语句在哪里?
ptqueryname中有什么内容@ -
尝试删除所有非强制参数。此外,端口 3309 看起来很奇怪。默认为 3306。错字?
-
@Thomas G 没有打开连接声明。 ptqueryname 是一个直通查询。使用 Openrecordset 运行传递槽查询将隐式打开 ODBC 连接。该连接可以在 MySQL Workbench 会话列表中看到。查询完成后,MS Access 会保持该连接打开。上面列出了连接字符串。我已经用“select 1;”替换了原来的 ptqueryname.SQL,但它并没有加快这个过程。 Openrecordset 语句位于从启动窗体的 Load 事件调用的函数中。该函数位于通用 VBA 模块中。
-
@Gustav 我正在使用更多,然后是一个用于开发的 MySQL 服务器。这个有 3309。我想设置一个复制从站,并运行一些 Mariadb 与 MySQL 的性能测试。如果有帮助,我将尝试使用最小连接字符串来查看。明天这里是国定假日,所以我会在星期三试试。
-
@Gustav 删除所有非强制性参数并没有帮助。但是,当我用“localhost”或数字 IP 替换 SERVER 名称时,连接打开得很快。所以延迟的根本原因一定是 ODBC 驱动程序和服务器名称解析。