Terapkan metode berikut untuk mempercepat kueri dan analisis log di Simple Log Service.
Tingkatkan jumlah shard atau aktifkan Dedicated SQL
Tingkatkan jumlah shard untuk meningkatkan kemampuan baca dan tulis data. Namun, metode ini hanya berlaku untuk data inkremental. Shard merupakan sumber daya komputasi—semakin banyak shard, semakin tinggi kecepatan perhitungan. Pastikan jumlah entri data yang dipindai per shard tidak melebihi 50 juta. Anda dapat menambah jumlah shard melalui pemisahan shard. Untuk informasi selengkapnya, lihat Split shard. Mengenai penagihan shard, lihat Billing examples of active shards based on billing methods.
Dedicated SQL mendukung konkurensi analisis yang lebih tinggi dan pemindaian data dalam volume lebih besar.
Persingkat rentang waktu dan kurangi volume data
Rentang waktu yang panjang memperlambat operasi kueri.
Untuk mempercepat perhitungan, persingkat rentang waktu kueri.
Volume data yang besar memperlambat operasi kueri.
Kurangi volume data dalam kueri.
Ulangi kueri
Jika hasil kueri tidak akurat, ulangi kueri terhadap data tersebut. Setiap kali menjalankan kueri, mekanisme akselerasi di lapisan bawah akan menganalisis hasil kueri sebelumnya. Dengan mengulangi kueri, sistem dapat mengembalikan hasil yang lebih akurat.
Optimalkan pernyataan analitik
Pernyataan kueri yang memakan waktu lama umumnya memiliki karakteristik berikut:
Menggunakan klausa GROUP BY untuk mengelompokkan hasil analisis berdasarkan satu atau beberapa kolom bertipe string.
Menggunakan klausa GROUP BY untuk mengelompokkan hasil analisis berdasarkan lebih dari lima kolom.
Berisi operasi yang menghasilkan string.
Gunakan metode berikut untuk mengoptimalkan pernyataan analitik:
Hindari operasi yang menghasilkan string.
Sebagai contoh, penggunaan fungsi date_format untuk menghasilkan timestamp dalam format tertentu akan menurunkan efisiensi kueri. Sebaiknya gunakan fungsi date_trunc atau time_series untuk menghasilkan timestamp. Contoh:
* | select date_format(from_unixtime(__time__) , '%H_%i') as t, count(1) group by tHindari pengelompokan hasil analisis berdasarkan kolom bertipe string.
Misalnya, penggunaan klausa GROUP BY pada satu atau beberapa kolom bertipe string menyebabkan beban kerja perhitungan hash menjadi sangat tinggi—lebih dari 50% dari total beban kerja perhitungan. Contoh:
Pernyataan kueri efisien
* | select count(1) as pv , from_unixtime(__time__-__time__%3600) as time group by __time__-__time__%3600Pernyataan kueri tidak efisien
* | select count(1) as pv , date_trunc('hour',__time__) as time group by time
Kedua pernyataan tersebut digunakan untuk menghitung jumlah log per jam. Pada pernyataan kedua, timestamp dikonversi menjadi string, lalu hasil dikelompokkan berdasarkan string tersebut (misalnya, "2021-12-12 00:00:00"). Pada pernyataan pertama, timestamp per jam diperoleh terlebih dahulu, hasil dikelompokkan berdasarkan timestamp tersebut, lalu baru dikonversi menjadi string.
Jika mengelompokkan berdasarkan beberapa kolom, letakkan bidang dengan jumlah nilai lebih besar sebelum bidang dengan jumlah nilai lebih kecil dalam klausa GROUP BY.
Misalnya, jika jumlah nilai suatu bidang adalah 13 dan jumlah nilai bidang uid mencapai 100 juta, letakkan bidang uid sebelum bidang tersebut dalam klausa GROUP BY. Contoh:
Pernyataan kueri efisien
* | select province,uid,count(1) group by uid,provincePernyataan kueri tidak efisien
* | select province,uid,count(1) group by province,uid
Gunakan fungsi aproksimasi.
Fungsi aproksimasi menawarkan performa lebih baik dibanding fungsi eksak karena mengorbankan presisi demi kecepatan. Contoh:
Pernyataan kueri efisien
* |select approx_distinct(ip)Pernyataan kueri tidak efisien
* | select count(distinct(ip))
Tentukan hanya kolom yang diperlukan dalam pernyataan analitik—jangan kueri semua kolom.
Dalam pernyataan analitik, kueri hanya kolom yang terlibat dalam perhitungan. Jika perlu mengambil semua kolom, gunakan sintaks pencarian. Contoh:
Pernyataan kueri efisien
* |select a,b cPernyataan kueri tidak efisien
* |select *
Letakkan kolom yang tidak digunakan untuk pengelompokan dalam fungsi agregat.
Misalnya, nilai kolom userid dan username saling berkorespondensi. Cukup masukkan kolom userid dalam klausa GROUP BY untuk mengelompokkan data. Contoh:
Pernyataan kueri efisien
* | select userid, arbitrary(username), count(1) group by useridPernyataan kueri tidak efisien
* | select userid, username, count(1) group by userid,username
Hindari penggunaan klausa IN.
Jangan gunakan klausa IN dalam pernyataan analitik. Sebagai gantinya, gunakan klausa OR dalam pernyataan pencarian. Contoh:
Pernyataan kueri dan analisis cepat
key: a or key: b or key: c | select count(1)Pernyataan kueri tidak efisien
* | select count(1) where key in ('a','b')