0

我开发了一个适用于大型 MySQL 数据库的脚本。该脚本适用于 IIS、MySQL、ASP Classic。该脚本选择 10,000 或 100,000 条记录,并逐条处理记录并更新数据库。一切正常,但性能非常慢。缓慢的原因不是因为 select 或 update 语句或服务器速度慢,而是因为一一处理这些记录并进行一些更改,然后更新。

例如

SELECT * from mytable
WHERE isempty(title)
ORDER BY length(title) DESC LIMIT 100000;

然后逐一处理这 100,000 条记录需要,例如 100,000 分钟。所以,我想用 2 或 3 个浏览器运行相同的脚本,比如说 IE、Chrome、FireFox..

我想这样做,但我不确定它是否可能。

在 IIS 上,当在浏览器 1 上运行脚本时,它会选择 100,000 条记录并开始处理它们并开始进行一些更改。在浏览器 2 上,它选择 100,000,但在具有相同条件的数据库较少的记录上,它可能会选择 90,000 并开始工作。由于浏览器启动的时间很早,它可能会进行一些更改,因此当两个线程都工作时,彼此必须看到这些更改并处理这些更改。例如,在当前记录上完成的标题,然后通过该记录并选择另一条记录。那可能吗?我不确定也从未使用过光标位置和光标类型或其他任何东西..

假设数据库中有 101,000 条记录,脚本 1 首先启动并选择 100,000 行。100 分钟后,浏览器 2 启动。但是当浏览器 2 选择了 100,000 行时,那个时候浏览器 1 已经完成了 10,000 行,所以浏览器 2 将只获得 91,000 条记录。但是由于这两个浏览器在同一个记录上工作,他们怎么能看到彼此的变化呢?

我现在的情况有什么解决办法吗?我不是 MySQL 专家,这就是为什么我不知道该怎么做。

对不起我的英语,但我希望你能理解我的问题。

更新;

这不是因为任何脚本问题、服务器缓慢问题或任何其他问题。这很慢,因为在“DO WHILE RS.EOF”和“LOOP”之间我做了很多事情,而且每条记录实际上并不需要一分钟,只是举个例子。但我正在考虑同时运行脚本的 2 或 3 个实例。

4

1 回答 1

1

ASP-Classic 不支持您正在寻找的多线程类型,但是您可以编写一个 COM 组件或类似的东西并从您的页面调用它。

除非用户需要某种类型的输入,否则您还可以在 VBScript/PowerShell/Python/etc 中编写服务器端任务。偶尔浏览数据并执行您想要完成的任何任务。当问题不是很具体时,很难具体。

说了这么多,听起来你的代码确实存在比你意识到的更多的问题。由于我们面前缺乏具体的例子,因此很难指出。如果您还没有,我会仔细检查以确保瓶颈在您认为的位置。

过去,我使用粗略的ASP Profiler来查找我仍然维护的 ASP/VBScript 站点中的具体瓶颈在哪里,并且有几次我发现问题出在最不可能的地方。

最重要的是,您的问题缺少大量信息来提供有用的答案,并且似乎做出了一些不一定正确的假设。给我们看一些代码,给我们一些数据,你可能会得到更好的答案。

于 2013-10-21T17:15:55.633 回答