Saya memiliki tabel 500 juta baris (dan terus bertambah)
Saya melakukan yang berikut ini untuk meningkatkan kinerja sisipan:
Di sisi basis data:
- menjatuhkan semua indeks dan batasan
- logging dinonaktifkan
Di sisi aplikasi:
- beralih dari entitas yang dikelola JPA ke kueri insert asli, menambahkan LAMPIRAN petunjuk Oracle ke kueri
- mencoba komit dalam batch per 1k / 2k / 3k baris
- mencoba menulis secara paralel (beberapa utas, jumlah utas = ke jumlah inti pada server) ke satu tabel
Ini memberi saya sekitar 300 baris per detik
Selain itu dicoba:
- tulis secara paralel dalam batch ke beberapa tabel (untuk mengelompokkan kemudian mengembalikan hasil menggunakan UNION)
Ini memberi saya sekitar 1rb baris per detik, tetapi di atas meja kosong. Tetapi ketika saya mengisi tabel dengan data dummy (masing-masing 200 juta), kecepatan insert turun menjadi 250 - 300 per detik.
Adakah yang bisa menyarankan apa lagi yang bisa saya lakukan untuk mempercepat insert? Pada dasarnya saya ingin mengerti apa itu (apa yang bisa) bottleneck dulu.
UPD: Tabel dipartisi berdasarkan tanggal penyisipan, tabel memiliki sekitar 60 kolom - sebagian besar kolom adalah VARCHAR2 (2000 BYTE)
/*+APPEND*/
petunjuk tersebut diabaikan pada sisipan baris tunggal (jika Anda tidak perlu INSERT INTO ... SELECT
repot menambahkan). (3) Anda harus menyiapkan contoh SQL * Loader dengan direct=true
menetapkan dasar seperti yang disarankan oleh @parsifal.