Memuat Data Besar? Untuk kecepatan lebih, Pra-Sortir dan Muat Massal
Menemukan kecepatan lebih saat memuat data besar merupakan tantangan dalam ETL, reorg, dan indeks basis data yang sangat besar (VLDB) mengisi operasi. Salah satu cara untuk memuat big data lebih cepat adalah dengan melakukan pre-sorting, sehingga database tidak perlu disortir. IBM dan penyedia basis data mainframe lainnya telah memberikan saran itu selama beberapa dekade, dan itu masih berlaku dalam basis data relasional yang digunakan di Unix dan "sistem terbuka" lainnya saat ini, termasuk Oracle, DB2, Sybase, dan SQL Server.
Tolok ukur di area ini menunjukkan peningkatan pada beban yang tidak disortir tergantung pada volume, tetapi vendor pengurutan seperti IRI mengklaim kinerja pemuatan telah meningkat antara dua dan sepuluh kali lipat. Dalam laporan TUSC Consulting “Benchmarking Index Impact on OLTP Load Rates and Online Database Block Size Rebuild in Oracle,” tes penyisipan indeks tunggal 100.000 baris saja menunjukkan bahwa data yang diurutkan sebelumnya dimuat 58% lebih cepat, dan membutuhkan ruang 49% lebih sedikit:
- Memuat dalam urutan terurut memiliki laju pemuatan baris/detik berkelanjutan 42% lebih rendah
- Penyisipan yang tidak disortir ke dalam indeks memaksa lebih banyak pekerjaan database internal (pengelolaan blok dan reorganisasi ruang) yang harus dilakukan
- Dalam indeks pengurutan beban, faktor pengelompokan akan mendekati jumlah blok daun
- Urutan data yang dimuat sangat penting untuk memuat kinerja.
Bertahun-tahun kemudian, dalam bab 13 dari panduan “Expert Oracle Database 11g Administration”, Sam R. Alapati (Miro Consulting) merekomendasikan pra-penyortiran bersama dengan pemuatan jalur langsung sebagai cara tercepat untuk memuat Oracle secara massal (versus insert):
“ Pemuatan jalur langsung opsi tidak menggunakan pernyataan SQL INSERT untuk memasukkan data ke dalam tabel; alih-alih, ini memformat blok data Oracle dan menulisnya langsung ke file database. Proses penulisan langsung ini menghilangkan banyak overhead yang terlibat dalam mengeksekusi pernyataan SQL untuk memuat tabel. Karena metode pemuatan jalur langsung tidak bersaing untuk sumber daya basis data, metode ini akan memuat data lebih cepat daripada pemuatan data konvensional. Untuk pemuatan data yang lebih besar, metode pemuatan jalur langsung adalah yang terbaik, dan ini mungkin satu-satunya metode yang layak untuk memuat data ke dalam tabel karena alasan sederhana bahwa pemuatan konvensional mungkin memerlukan lebih banyak waktu daripada yang tersedia.”
Untuk administrator VLDB hari ini, di sinilah CoSort berperan, karena:
“Selain keuntungan nyata dari waktu buka yang lebih singkat, pemuatan langsung juga membantu Anda membangun kembali indeks dan menyusun data tabel.”
CoSort secara tradisional digunakan dalam pra-sortir eksternal dari file datar yang akan diimpor ke beban yang menentukan “direct=true” dan opsi ini:
“SORTED INDEXES:Parameter SORTED_INDEXES memberi sinyal kepada SQL*Loader bahwa data diurutkan pada indeks tertentu, yang meningkatkan kinerja pemuatan.”
Demikian pula, dokumentasi Microsoft SQL Server menetapkan pra-penyortiran file sebagai salah satu "Metode untuk Mengoptimalkan Impor Massal":
Secara default, operasi impor massal mengasumsikan bahwa file data tidak berurutan. Jika tabel memiliki indeks berkerumun, bcp utilitas, pernyataan BULK INSERT, dan fungsi OPENROWSET(BULK…) (Transact-SQL) memungkinkan Anda menentukan cara data dalam file data diurutkan selama operasi impor massal. Ini adalah opsional untuk data dalam file data yang akan diurutkan dalam urutan yang sama seperti tabel. Namun, Anda dapat meningkatkan kinerja operasi impor massal jika Anda menentukan urutan yang sama untuk file data seperti tabel.
Bidang /KEY dalam skrip CoSort SortCL biasanya akan menjadi kunci indeks (utama) terpanjang dalam tabel, tetapi tidak harus demikian. Menurut TUSC, untuk kolom serupa:
- Lebih sedikit indeks yang lebih panjang lebih disukai daripada indeks yang lebih pendek
- Kolom terdepan mendorong biaya pemuatan indeks
Perhatikan juga bahwa:
- Per Vertica dan primer RDBMS lainnya, mempertahankan kolom dalam urutan yang diurutkan akan mengoptimalkan kinerja kueri. Bahkan saran lama dalam Panduan Rdb/VMS DEC untuk Pemeliharaan dan Kinerja Basis Data masih berlaku:
“Pra-sortir catatan yang Anda rencanakan untuk disimpan dalam tabel berdasarkan nilai kunci utama sebelum memuatnya ke dalam database. Ketika catatan dimuat, mereka akan secara fisik berdekatan satu sama lain, atau berkerumun, sampai catatan tambahan disimpan dalam database. Mempertahankan pengaturan ini menguntungkan kueri yang memilih baris berdasarkan rentang nilai atau yang menggabungkan banyak baris dari satu tabel dengan baris dalam tabel yang sama.”
- Pengurutan data sebelumnya dalam tabel juga dapat menghemat waktu dalam tampilan. Menurut “Oracle Database 10g:Referensi Lengkap” oleh Kevin Loney:
“Memiliki data yang diurutkan dalam tampilan dapat menyederhanakan pengembangan aplikasi Anda. Misalnya, jika kode Anda melewati serangkaian catatan, membuat catatan tersebut disortir sebelumnya dapat membuat pemrosesan dan pemeriksaan kesalahan Anda menjadi lebih sederhana. Dalam pengembangan aplikasi Anda, Anda akan mengetahui bahwa data akan selalu dikembalikan kepada Anda secara berurutan.”
- Tuan. Alapati memperingatkan DBA tentang batasan pemuatan jalur langsung:
“Catatan:Dalam pemuatan langsung, Anda tidak dapat menggunakan fungsi SQL apa pun. Jika Anda perlu melakukan pemuatan data yang besar dan juga mengubah data selama memuat, Anda memiliki masalah. Pemuatan data konvensional memungkinkan Anda menggunakan fungsi SQL untuk mengubah data, tetapi metode ini sangat lambat dibandingkan dengan pemuatan langsung. Jadi, untuk pemuatan data yang besar, Anda mungkin ingin mempertimbangkan untuk menggunakan salah satu teknik pemuatan/transformasi yang lebih baru, seperti tabel eksternal atau fungsi tabel.”
Namun, program SortCL CoSort dapat mengubah data pemuatan selama pra-penyortiran; yaitu dengan menggabungkan jenis fungsi SQL yang sama dalam skrip pekerjaan dan I/O pass yang sama, termasuk:bergabung, agregasi, perhitungan silang, pencarian, pilih/filter, fungsi substring dan instring, dan banyak pemformatan ulang dan target laporan kustom — dalam operasi pra-sortir yang sama.
- Utilitas reorg offline baru di IRI Workbench (Eclipse GUI) menggunakan IRI FACT (Fast Extract) untuk membongkar data tabel dengan cepat melalui OCI, menggunakan CoSort untuk mengurutkan sebelumnya pada kunci utama, dan menulis serta menjalankan SQL*Loader langsung beban jalur untuk mengoptimalkan dan menggabungkan setiap langkah ini.