Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menstrim Set Keputusan MySQL Besar dengan Cekap dalam Musim Bunga Tanpa Ralat OutOfMemory?

Bagaimana untuk Menstrim Set Keputusan MySQL Besar dengan Cekap dalam Musim Bunga Tanpa Ralat OutOfMemory?

Patricia Arquette
Patricia Arquetteasal
2024-12-02 01:17:12792semak imbas

How to Efficiently Stream Large MySQL Result Sets in Spring Without OutOfMemory Errors?

Menstrim Set Keputusan MySQL Besar

Penerangan Masalah

Apabila memuatkan jadual MySQL yang besar dalam Aplikasi musim bunga, pengecualian OutOfMemory berlaku disebabkan percubaan pemandu untuk memuatkan keseluruhan jadual ke dalam memori. Walaupun menetapkan saiz pengambilan kepada Integer.MIN_VALUE, menutup ResultSets membawa kepada isu tergantung. Hang berterusan walaupun untuk jadual kecil dan menghalang penutupan sambungan, mengakibatkan kesan tindanan berikut:

[Stack trace of the hang inserted here]

Penyelesaian

Menetapkan saiz pengambilan sahaja tidak mencukupi. Pemacu MySQL JDBC memerlukan kaedah penciptaan Pernyataan khusus:

stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);

Awas dan Implikasi

Pendekatan ini mempunyai beberapa kaveat:

  • Semua baris dalam set hasil mesti dibaca sebelum pertanyaan lain boleh dibaca dilaksanakan.
  • Kunci tidak dilepaskan sehingga transaksi atau penyata selesai, atau set hasil aktif ditutup.

Pertimbangan Tambahan

Jika pengecualian OutOfMemory berterusan, pertimbangkan untuk melaksanakan pemprosesan segera data yang diambil daripada pangkalan data untuk mengelakkan memori berlebihan peruntukan. Ini mungkin memerlukan penstrukturan semula kod yang ketara dan pendekatan kawalan aliran yang berbeza.

Atas ialah kandungan terperinci Bagaimana untuk Menstrim Set Keputusan MySQL Besar dengan Cekap dalam Musim Bunga Tanpa Ralat OutOfMemory?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn