全部产品
Search
文档中心

Simple Log Service:Mempercepat kueri dan analisis log

更新时间:Jul 02, 2025

Gunakan metode berikut untuk mempercepat kueri dan analisis log.

Tingkatkan jumlah shard atau aktifkan Dedicated SQL

  • Meningkatkan jumlah shard dapat meningkatkan kemampuan membaca dan menulis data. Namun, metode ini hanya berlaku untuk data tambahan. Shard adalah sumber daya komputasi yang meningkatkan kecepatan perhitungan sesuai dengan jumlahnya. Pastikan entri data yang dipindai per shard tidak melebihi 50 juta. Anda dapat membagi shard untuk menambah jumlahnya. Untuk informasi lebih lanjut, lihat Pisahkan Shard. Untuk detail penagihan shard, lihat Contoh Penagihan Shard Aktif Berdasarkan Metode Penagihan.

  • Dedicated SQL mendukung operasi analitik bersamaan dalam jumlah besar serta pemindaian data yang lebih besar. Untuk informasi lebih lanjut, lihat Aktifkan Dedicated SQL.

Persingkat rentang waktu dan kurangi jumlah data dalam operasi kueri

  • Rentang waktu yang panjang memperlambat operasi kueri.

    Untuk mempercepat perhitungan, persingkat rentang waktu operasi kueri.

  • Jumlah data yang besar memperlambat operasi kueri.

    Kami merekomendasikan mengurangi jumlah data dalam operasi kueri.

Kueri ulang data

Jika hasil kueri tidak akurat, Anda dapat mengkueri ulang data. Setiap kali Anda menjalankan kueri, mekanisme percepatan menganalisis hasil kueri yang ada. Dengan mengkueri ulang data, sistem dapat memberikan hasil yang lebih akurat.

Optimalkan pernyataan analitik

Pernyataan kueri yang memakan waktu memiliki karakteristik berikut:

  • Klausa GROUP BY digunakan untuk mengelompokkan hasil analisis berdasarkan satu atau beberapa kolom tipe string.

  • Klausa GROUP BY digunakan untuk mengelompokkan hasil analisis berdasarkan lebih dari lima kolom.

  • Operasi yang menghasilkan string termasuk dalam pernyataan.

Gunakan metode berikut untuk mengoptimalkan pernyataan analitik:

  • Hindari operasi yang menghasilkan string.

    Sebagai contoh, jika Anda menggunakan fungsi date_format untuk menghasilkan timestamp dalam format tertentu, efisiensi kueri rendah. Kami merekomendasikan menggunakan fungsi date_trunc atau time_series untuk menghasilkan timestamp. Contoh:

    * | select date_format(from_unixtime(__time__) , '%H_%i') as t, count(1) group by t
  • Hindari pengelompokan hasil analisis berdasarkan satu atau beberapa kolom tipe string.

    Sebagai contoh, jika Anda menggunakan klausa GROUP BY untuk mengelompokkan hasil analisis berdasarkan kolom tipe string, beban kerja untuk perhitungan hash sangat tinggi, mencakup 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__%3600
    • Pernyataan kueri tidak efisien

      * | select count(1) as pv , date_trunc('hour',__time__) as time group by time

    Kedua pernyataan kueri digunakan untuk menghitung jumlah log per jam. Dalam pernyataan kedua, timestamp diubah menjadi string, lalu hasil dikelompokkan berdasarkan string (contoh: "2021-12-12 00:00:00"). Dalam pernyataan pertama, timestamp pada jam diperoleh, hasil dikelompokkan berdasarkan timestamp, lalu timestamp diubah menjadi string.

  • Jika ingin mengelompokkan hasil analisis berdasarkan beberapa kolom, tempatkan bidang dengan jumlah nilai lebih besar sebelum bidang dengan jumlah nilai lebih kecil.

    Sebagai contoh, jika jumlah nilai untuk bidang tertentu adalah 13 dan jumlah nilai untuk bidang uid adalah 100 juta, tempatkan bidang uid sebelum bidang tertentu dalam klausa GROUP BY. Contoh:

    • Pernyataan kueri efisien

      * | select province,uid,count(1) group by uid,province
    • Pernyataan kueri tidak efisien

       * | select province,uid,count(1) group by province,uid
  • Gunakan fungsi perkiraan.

    Fungsi perkiraan menawarkan kinerja lebih baik dibandingkan fungsi dengan presisi tetap, meskipun mengorbankan sedikit presisi demi kecepatan. Contoh:

    • Pernyataan kueri efisien

       * |select approx_distinct(ip)
    • Pernyataan kueri tidak efisien

       * | select count(distinct(ip))
  • Tentukan hanya kolom yang ingin dikueri dalam pernyataan analitik. Hindari mengkueri semua kolom.

    Dalam pernyataan analitik, kami merekomendasikan hanya mengkueri kolom yang diperlukan dalam perhitungan. Jika ingin mengkueri semua kolom, gunakan sintaks pencarian. Contoh:

    • Pernyataan kueri efisien

      * |select a,b c 
    • Pernyataan kueri tidak efisien

      * |select *
  • Tempatkan kolom yang tidak digunakan untuk pengelompokan dalam fungsi agregat.

    Sebagai contoh, jika nilai kolom userid dan username harus sesuai satu sama lain, cukup tentukan kolom userid dalam klausa GROUP BY untuk mengelompokkan data. Contoh:

    • Pernyataan kueri efisien

       * | select userid, arbitrary(username), count(1) group by userid 
    • Pernyataan kueri tidak efisien

      * | select userid, username, count(1) group by userid,username
  • Hindari penggunaan klausa IN.

    Kami merekomendasikan tidak menggunakan klausa IN dalam pernyataan analitik. Sebagai gantinya, gunakan klausa OR dalam pernyataan pencarian. Contoh:

    • Pernyataan kueri efisien

      key: a or key: b or key: c | select count(1)
    • Pernyataan kueri tidak efisien

      * | select count(1) where key in ('a','b')