Peningkatan SQL secara otomatis menskalakan sumber daya penyimpanan dan komputasi untuk mempercepat kueri dan analisis di Simple Log Service.
Cara kerja
Latar belakang
Simple Log Service memisahkan lapisan penyimpanan dari komputasi: lapisan penyimpanan berbasis shard menangani penyimpanan dan manajemen data, sedangkan lapisan komputasi menggunakan SQL untuk kueri dan analisis.
Untuk meningkatkan performa analisis, Anda dapat meningkatkan kedua lapisan tersebut. Bagian berikut membandingkan solusi umum.
Solusi 1: Pemisahan shard
Secara manual memisahkan shard untuk memperluas kapasitas penyimpanan dan meningkatkan throughput komputasi.
Batasan:
-
Metode ini hanya berlaku untuk data yang baru ditulis.
-
Shard aktif dikenai biaya. Billing.
-
Kueri tunggal dibatasi oleh konkurensi dan volume data.
-
Anda harus secara manual memisahkan atau menggabungkan shard.
Solusi 2: Kueri bagi dan taklukkan
Pecah kueri besar menjadi beberapa subkueri dan agregasikan hasilnya.
Batasan:
-
Memerlukan pemeliharaan logika agregasi sekunder dan penyimpanan antara. Gunakan Scheduled SQL untuk hal ini.
-
Mengubah dimensi analisis memerlukan rekonstruksi logika agregasi.
-
Kemacetan komputasi masih dapat terjadi pada volume data yang sangat besar.
Solusi 3: Gunakan Peningkatan SQL
Peningkatan SQL secara otomatis menskalakan sumber daya penyimpanan dan komputasi berdasarkan volume data untuk mempercepat analisis.
|
Perbandingan |
Solusi 1: Pemisahan Shard |
Solusi 2: Kueri Bagi dan Taklukkan |
Solusi 3: Gunakan Peningkatan SQL |
|
Isolasi resource |
Resource penyimpanan independen, resource komputasi bersama |
Resource penyimpanan independen, resource komputasi bersama |
Resource penyimpanan independen dan resource komputasi khusus elastis |
|
Granularitas penskalaan |
Penskalaan lapisan penyimpanan |
Penskalaan lapisan komputasi |
Penskalaan elastis untuk kedua lapisan penyimpanan dan komputasi |
|
Overhead pemeliharaan |
Memerlukan intervensi manual. |
Anda harus memecah kueri besar menjadi subkueri. |
Penjadwalan sepenuhnya otomatis. |
|
Kompleksitas kueri |
Mendukung SQL native. |
Memerlukan pengembangan kustom. |
Mendukung SQL native. |
Prasyarat
Logstore Standard telah dibuat. Untuk informasi selengkapnya, lihat Buat logstore dasar.
-
Log telah dikumpulkan. Untuk informasi selengkapnya, lihat Pengumpulan data.
-
Indeks telah dikonfigurasi. Untuk informasi selengkapnya, lihat Konfigurasikan indeks.
Prosedur
Aktifkan Peningkatan SQL dengan salah satu cara berikut:
-
Aktifkan untuk kueri tunggal: hanya berlaku untuk kueri saat ini di Logstore.
-
Aktifkan secara default: berlaku untuk semua kueri di Project, termasuk alert dan dashboard.
Konsol
Aktifkan untuk kueri tunggal
Masuk ke Konsol Simple Log Service.
Di bagian Projects, klik Project yang diinginkan.

Pada tab , klik logstore yang diinginkan.

-
Klik .
Aktifkan secara default
Masuk ke Konsol Simple Log Service.
Di bagian Projects, klik Project yang diinginkan.

-
Klik ikon
.Klik ikon Home di bilah navigasi atas untuk kembali ke daftar Project atau beralih Project.
-
Arahkan kursor ke CUs of SQL-dedicated Instance dan klik Settings.
-
Di panel Modify CUs of SQL-dedicated Instance, aktifkan sakelar Enable by Default, lalu klik OK.
API
Aktifkan untuk kueri tunggal
-
GetLogs (mengembalikan hasil tidak terkompresi) - Kueri log di Logstore
Konfigurasikan salah satu parameter berikut.
-
Parameter
powerSql: atur ke true untuk Peningkatan SQL, atau false (default) untuk SQL Standar. -
Parameter
query: tambahkan awalanset session parallel_sql=true;pada pernyataan SQL Anda. Contohnya,* | select count(*) as pvmenjadi* | set session parallel_sql=true; select count(*) as pv.
-
-
GetLogsV2 (mengembalikan hasil terkompresi) - Kueri data log di Logstore
Konfigurasikan salah satu parameter berikut.
-
Parameter
powerSql: atur ke true untuk Peningkatan SQL, atau false (default) untuk SQL Standar. -
Parameter
query: tambahkan awalanset session parallel_sql=true;pada pernyataan SQL Anda. Contohnya,* | select count(*) as pvmenjadi* | set session parallel_sql=true; select count(*) as pv.
-
Aktifkan secara default
Pada operasi Buat instans Dedicated SQL, atur useAsDefault=true untuk mengaktifkan Peningkatan SQL secara default untuk Project.
SDK
Contoh berikut menggunakan Java SDK.
Prasyarat
Aktifkan untuk kueri tunggal
-
Metode GetLogs()
Konfigurasikan salah satu parameter berikut.
-
Parameter
powerSql: atur ke true untuk Peningkatan SQL, atau false (default) untuk SQL Standar. -
Parameter
query: tambahkan awalanset session parallel_sql=true;pada pernyataan SQL Anda. Contohnya,* | select count(*) as pvmenjadi* | set session parallel_sql=true; select count(*) as pv.
import com.aliyun.openservices.log.Client; import com.aliyun.openservices.log.exception.LogException; import com.aliyun.openservices.log.response.GetLogsResponse; import java.util.Date; public class CreateSqlInstance { public static void main(String[] args) throws LogException { // Contoh ini menunjukkan cara mendapatkan ID AccessKey dan Rahasia AccessKey dari variabel lingkungan. String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); // Titik akhir untuk Simple Log Service. Contoh ini menggunakan titik akhir untuk wilayah China (Hangzhou). Ganti dengan titik akhir yang sebenarnya. String host = "https://cn-hangzhou.log.aliyuncs.com"; // Buat klien Simple Log Service. Client client = new Client(host, accessId, accessKey); // Nama Project. String projectName = "aliyun-project-test"; // Nama Logstore. String logstore = "request_log"; // Menentukan apakah akan mengaktifkan Peningkatan SQL secara default. Nilai default: false. boolean useAsDefault = true; // Pernyataan kueri SQL. String query = "* | select count(1)"; // Jumlah maksimum log yang dikembalikan. Parameter ini hanya berlaku jika parameter query berupa pernyataan pencarian. Rentang nilai: 0 hingga 100. Nilai default: 100. int line = 3; // Nomor baris tempat memulai kueri. Parameter ini hanya berlaku jika parameter query berupa pernyataan pencarian. Nilai default: 0. int offset = 0; // Menentukan apakah akan mengembalikan log dalam urutan kronologis terbalik berdasarkan stempel waktu log, akurat hingga menit. // true: Mengembalikan log dalam urutan kronologis terbalik. // false (default): Mengembalikan log dalam urutan kronologis. boolean reverse = false; // Menentukan apakah akan menggunakan Peningkatan SQL. // true: Gunakan Peningkatan SQL. // false (default): Gunakan SQL Standar. boolean powerSql = true; int from = (int) (new Date().getTime() / 1000 - 600); int to = (int) (new Date().getTime() / 1000); GetLogsResponse getLogsResponse = client.GetLogs(projectName, logstore, from, to, "", query, line, offset, reverse, powerSql); System.out.println(getLogsResponse.getCpuSec()); } } -
Aktifkan secara default
Atur boolean useAsDefault = true untuk mengaktifkan Peningkatan SQL secara default untuk Project.
import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.exception.LogException;
import com.aliyun.openservices.log.request.CreateOrUpdateSqlInstanceRequest;
public class CreateSqlInstance {
public static void main(String[] args) throws LogException {
// Contoh ini menunjukkan cara mendapatkan ID AccessKey dan Rahasia AccessKey dari variabel lingkungan.
String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// Nama Project.
String projectName = "aliyun-test-project";
// Titik akhir untuk Simple Log Service. Contoh ini menggunakan titik akhir untuk wilayah China (Hangzhou). Ganti dengan titik akhir yang sebenarnya.
String host = "https://cn-hangzhou.log.aliyuncs.com";
// Buat klien Simple Log Service.
Client client = new Client(host, accessId, accessKey);
int cu = 100;
boolean useAsDefault = true;
client.createSqlInstance(new CreateOrUpdateSqlInstanceRequest(projectName, cu, useAsDefault));
}
}
FAQ
-
Bagaimana cara memeriksa waktu CPU?
Setelah menjalankan kueri, arahkan kursor ke Analysis Results untuk melihat waktu CPU. Bidang Consumed CPU Time di panel statistik kanan atas menunjukkan waktu CPU yang digunakan, dalam satuan detik.
-
Biaya kueri Dedicated SQL
Biaya bervariasi tergantung volume data dan kompleksitas kueri. Tabel berikut menunjukkan contohnya.
Pernyataan kueri
Volume data (baris)
Biaya per eksekusi (USD)
* | select avg(double_0) from stress_s1_mil14 miliar
0,004435
* | select avg(double_0), sum(double_0), max(double_0), min(double_0), count(double_0) from stress_s1_mil14 miliar
0,006504
* | select avg(double_0), sum(double_1), max(double_2), min(double_3), count(double_4) from stress_s1_mil14 miliar
0,013600
* | select key_0 , avg(double_0) as pv from stress_s1_mil1 group by key_0 order by pv desc limit 10004 miliar
0,011826
* | select long_0, avg(double_0) as pv from stress_s1_mil1 group by long_0 order by pv desc limit 10004 miliar
0,011087
* | select long_0, long_1, avg(double_0) as pv from stress_s1_mil1 group by long_0,long_1 order by pv desc limit 1000300 juta
0,010791
* | select avg(double_0) from stress_s1_mil1 where key_0='key_987'4 miliar
0,00007
> SQL Enhancement