0

大規模な MySQL データベースで動作するスクリプトを開発しました。スクリプトは、IIS、MySQL、ASP Classic で動作します。スクリプトは 10,000 または 100,000 レコードを選択し、レコードを 1 つずつ処理してデータベースを更新します。すべて正常に動作しますが、パフォーマンスが非常に遅くなります。速度が遅い理由は、選択ステートメントや更新ステートメント、またはサーバーの遅さではなく、これらのレコードを 1 つずつ処理し、いくつかの変更を行ってから更新するためです。

例えば

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

次に、これらの 100,000 レコードを 1 つずつ処理するには、たとえば 100,000 分かかります。したがって、IE、Chrome、FireFox など、2 つまたは 3 つのブラウザーで同じスクリプトを実行したいと考えています。

このようにしようと考えていましたが、可能かどうかはわかりません。

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 レコードしか取得しません。しかし、これらの 2 つのブラウザーは同じレコードで動作するため、お互いの変更をどのように確認できるでしょうか?

私の現在の状況に対する解決策はありますか?私は MySQL の専門家ではないため、何をすべきかわかりません。

私の英語で申し訳ありませんが、私の質問を理解していただければ幸いです。

アップデート;

これは、スクリプトの問題、遅いサーバーの問題、またはその他の問題によるものではありません。「DO WHILE RS.EOF」と「LOOP」の間で多くのことを行い、例を挙げただけでレコードごとに1分もかからないため、これは遅いです。しかし、スクリプトを実行している 2 つまたは 3 つのインスタンスを同時に考えていました。

4

1 に答える 1

1

ASP-Classic は、探しているタイプのマルチスレッドをサポートしていませんが、COM コンポーネントなどを記述してページから呼び出すことができます。

ユーザーから何らかの入力が必要な場合を除き、サーバー側のタスクを VBScript/PowerShell/Python/etc で記述することもできます。ときどきデータを調べて、達成しようとしているタスクを実行します。質問があまり具体的でない場合、具体的にするのは難しいです。

そうは言っても、あなたのコードには、あなたが思っているよりも多くの問題があるように思えます。目の前に具体的な例がないため、指摘するのは困難です。まだ行っていない場合は、ボトルネックがあなたが考えている場所にあることを確認するために再確認します.

私は過去に大雑把なASP プロファイラーを使用して、現在も維持している ASP/VBScript サイトの特定のボトルネックがどこにあるかを調べました。その結果、問題が最も可能性が低い場所にあることがわかったことが何度かありました。

肝心なのは、あなたの質問には有用な回答を提供するためのかなりの量の情報が欠けており、必ずしも真実ではないかもしれないいくつかの仮定をしているようです. いくつかのコードを見せて、いくつかのデータを提供してください。そうすれば、おそらくより良い答えが得られるでしょう。

于 2013-10-21T17:15:55.633 に答える