SQLを実行すると遅くなる
2 posters
SQLを実行すると遅くなる
v13で4DServer上でSQLをつかってデータをMySQLへ書き出す処理を書いたのですが、件数が予想よりおおかったらしく処理に時間がかかっていました。
ここまでは良いのですが、その実行中4D Serverの動作が全体的に遅くなり、接続しているクライアントまで影響を受けました。
こんなものなんでしょうか?SQLってプリエンティブだったと思うのですが...
もしかするとv15及びv16あたりでは改善されているのでしょうか。
ここまでは良いのですが、その実行中4D Serverの動作が全体的に遅くなり、接続しているクライアントまで影響を受けました。
こんなものなんでしょうか?SQLってプリエンティブだったと思うのですが...
もしかするとv15及びv16あたりでは改善されているのでしょうか。
hosaka- 投稿数 : 241
登録日 : 2016/07/04
所在地 : 大阪
Re: SQLを実行すると遅くなる
SQLが「プリエンプティブ」なのは,サーバー処理,つまり,4Dのデータベースに対して同時に複数のSQLリクエストが投じられた場合,それらを並行処理できるという意味です。SQLコマンドの実行(クライアント処理)はコオペラティブです。Begin SQL/End SQL・SQL EXECUTE・SQL LOGINなどのコマンドは,「スレッドセーフ」コマンドでもないことに留意してください。
http://doc.4d.com/4Dv16R2/4D/16-R2.1620/Begin-SQL.301-3111493.ja.html
http://doc.4d.com/4Dv16R2/4D/16-R2.1620/SQL-EXECUTE.301-3111487.ja.html
http://doc.4d.com/4Dv16R2/4D/16-R2.1620/SQL-LOGIN.301-3111490.ja.html
SQLコマンド(クライアント処理)を実行している間,コオペラティブスレッドで実行されなければならない,その他の処理は,タイムスライスを奪われることになります。
http://doc.4d.com/4Dv16R2/4D/16-R2.1620/Begin-SQL.301-3111493.ja.html
http://doc.4d.com/4Dv16R2/4D/16-R2.1620/SQL-EXECUTE.301-3111487.ja.html
http://doc.4d.com/4Dv16R2/4D/16-R2.1620/SQL-LOGIN.301-3111490.ja.html
SQLコマンド(クライアント処理)を実行している間,コオペラティブスレッドで実行されなければならない,その他の処理は,タイムスライスを奪われることになります。
miyako- 投稿数 : 468
登録日 : 2016/07/05
Re: SQLを実行すると遅くなる
ご説明ありがとうございます。
SQLコマンド自体は、プリエンティブでもスレッドセーフでもないんですね。
そうすると、ストアドなどでSQLを含むコードを実行すると、4D Server/Client全体を遅くしてしまうということですね。
ドキュメントをみてみたのですが、スレッドセーブについての記述がみつかりませんでした。
スレッドセーブのコマンドとそうでないコマンドはどのように見分ければよいのでしょうか?
SQLで記述しているコードは、4Dコードに書き換えた方がよいのでしょうか。
SQLコマンド自体は、プリエンティブでもスレッドセーフでもないんですね。
そうすると、ストアドなどでSQLを含むコードを実行すると、4D Server/Client全体を遅くしてしまうということですね。
ドキュメントをみてみたのですが、スレッドセーブについての記述がみつかりませんでした。
スレッドセーブのコマンドとそうでないコマンドはどのように見分ければよいのでしょうか?
SQLで記述しているコードは、4Dコードに書き換えた方がよいのでしょうか。
hosaka- 投稿数 : 241
登録日 : 2016/07/04
所在地 : 大阪
Re: SQLを実行すると遅くなる
http://doc.4d.com/4Dv16R2/4D/16-R2.1620/Preemptive-4D-processes.300-3111846.ja.html
ここに説明がありました。
プリエンティブとスレッドセーフは、一応同一ということのようですね。
ここに説明がありました。
プリエンティブとスレッドセーフは、一応同一ということのようですね。
hosaka- 投稿数 : 241
登録日 : 2016/07/04
所在地 : 大阪
Re: SQLを実行すると遅くなる
スレッドセーフコマンドは,ドキュメント上でアイコンが表示されています。

アイコンをクリックすると,一覧ページに飛ぶことができます。
Command nameで属性情報を取得することもできます。
参考:スライド#28
https://www.slideshare.net/kmiyako/4d-world-tour-2017

アイコンをクリックすると,一覧ページに飛ぶことができます。
Command nameで属性情報を取得することもできます。
参考:スライド#28
https://www.slideshare.net/kmiyako/4d-world-tour-2017
miyako- 投稿数 : 468
登録日 : 2016/07/05
Re: SQLを実行すると遅くなる
考えたのですが今回の事案のような場合には、4D Server上でストアドするのをやめて、
別途更新用の4Dストラクチャを作って4D Serverからデータを取得してMySQLへ書き込むのが良いみたいですね。
別途更新用の4Dストラクチャを作って4D Serverからデータを取得してMySQLへ書き込むのが良いみたいですね。
hosaka- 投稿数 : 241
登録日 : 2016/07/04
所在地 : 大阪
Re: SQLを実行すると遅くなる
MySQLには、INSERT文の構文として’ON DUPLICATE KEY UPDATE’というのがあるのですが、これ便利ですね。
なければ追加、あれば更新というのが1行ですみます。4DのSQLにも導入してくれないかな。
なければ追加、あれば更新というのが1行ですみます。4DのSQLにも導入してくれないかな。

hosaka- 投稿数 : 241
登録日 : 2016/07/04
所在地 : 大阪
Permissions in this forum:
返信投稿: 不可
|
|