全部产品
Search
文档中心

MaxCompute:Mengatasi lonjakan biaya MaxCompute bayar sesuai penggunaan yang tiba-tiba

更新时间:Mar 20, 2026

Anda dikenai biaya saat menggunakan MaxCompute untuk pengembangan. Jika pengeluaran harian Anda biasanya stabil tetapi tiba-tiba membengkak dalam suatu periode, analisislah biaya tersebut untuk mengidentifikasi proyek dan pekerjaan penyebab lonjakan. Selanjutnya, optimalkan atau sesuaikan pekerjaan tersebut guna mengurangi biaya. Topik ini menjelaskan cara menggunakan rincian penagihan dan layanan Information Schema (meta global MaxCompute) untuk mengatasi lonjakan biaya MaxCompute bayar sesuai penggunaan yang tiba-tiba.

Informasi latar belakang

Topik ini menggunakan pendekatan berikut secara keseluruhan untuk mengatasi lonjakan biaya MaxCompute bayar sesuai penggunaan yang tiba-tiba:

  1. Gunakan Fee Hub untuk mengonfirmasi tanggal ketika biaya melebihi ekspektasi, lalu identifikasi item penagihan pada proyek mana yang menghasilkan biaya tinggi pada hari tersebut.

  2. Analisis akar penyebab kenaikan biaya:

    • Jika biaya komputasi melebihi ekspektasi, gunakan tampilan TASKS_HISTORY di Information Schema untuk menghitung volume pekerjaan dan mencantumkan pekerjaan dengan biaya tertinggi.

    • Jika biaya penyimpanan melebihi ekspektasi, unduh rincian penggunaan untuk menganalisis perubahan biaya penyimpanan.

    • Jika biaya trafik downstream jaringan publik melebihi ekspektasi, gunakan tampilan TUNNELS_HISTORY di Information Schema untuk melacak perubahan biaya trafik downstream jaringan publik.

Langkah 1: Aktifkan layanan Information Schema

Mulai 1 Maret 2024, MaxCompute tidak lagi secara otomatis menginstal paket Information Schema tingkat proyek untuk proyek baru. Proyek baru tidak memiliki paket Information Schema tingkat proyek secara default. Jika bisnis Anda memerlukan kueri metadata, gunakan Information Schema tingkat tenant sebagai gantinya karena informasinya lebih lengkap. Untuk petunjuk penggunaan Information Schema tingkat tenant, lihat Tenant-level Information Schema.

Untuk proyek MaxCompute yang sudah ada, sebelum menggunakan layanan Information Schema, Anda perlu:

  • Menjadi pemilik proyek atau Pengguna Resource Access Management (RAM) dengan role Super_Administrator agar memiliki akses ke metadata proyek. Untuk informasi lebih lanjut tentang menetapkan role management kepada pengguna, lihat Assign roles to users.

  • Anda dapat menginstal paket dengan dua cara. Untuk informasi lebih lanjut tentang fitur dan batasan Information Schema, lihat Information Schema overview.

  • Untuk menganalisis metadata dari beberapa proyek MaxCompute, instal paket Information Schema untuk setiap proyek, lalu masukkan metadata backup dari setiap proyek ke dalam tabel yang sama untuk analisis terpusat.

  • Kami merekomendasikan penggunaan tenant-level Information Schema, yang memungkinkan Anda mengkueri metadata dan riwayat penggunaan untuk semua proyek Anda.

(Opsional) Langkah 2: Berikan izin kepada pengguna selain pemilik proyek

Tampilan Information Schema berisi semua data pengguna di tingkat proyek. Secara default, pemilik proyek dapat melihat data ini. Jika pengguna atau role lain dalam proyek perlu melihatnya, Anda harus memberikan izin kepada mereka. Untuk informasi lebih lanjut, lihat Access resources across projects based on packages.

Sintaksis untuk memberikan izin adalah sebagai berikut.

grant <actions> on package Information_Schema.systables to user <user_name>;
grant <actions> on package Information_Schema.systables to role <role_name>;
  • actions: Izin yang diberikan. Nilainya harus Read.

  • user_name: Akun Alibaba Cloud atau RAM user yang telah ditambahkan ke proyek.

    Anda dapat menjalankan perintah list users; di MaxCompute client untuk mendapatkan daftar akun pengguna.

  • role_name: Role yang telah ditambahkan ke proyek.

    Anda dapat menjalankan perintah list roles; di MaxCompute client untuk mendapatkan nama role.

Contoh berikut menunjukkan cara memberikan izin.

grant read on package Information_Schema.systables to user RAM$Bob@aliyun.com:user01;

(Opsional) Langkah 3: Unduh dan backup metadata

MaxCompute menyimpan riwayat pekerjaan untuk pekerjaan yang telah selesai selama 14 hari terakhir. Jika Anda sering mengkueri data yang lebih tua dari 14 hari, backup metadata ke proyek Anda secara berkala. Lewati langkah ini jika Anda hanya menjalankan kueri ad hoc untuk riwayat pekerjaan dalam 14 hari terakhir.

  1. Masuk ke MaxCompute client. Jalankan perintah berikut untuk membuat tabel backup metadata.

    Buat tabel backup metadata

    -- project_name adalah nama proyek MaxCompute.
    -- Buat tabel backup tasks_history.
    CREATE TABLE IF NOT EXISTS <project_name>.tasks_history
    (
        task_catalog STRING
        ,task_schema STRING
        ,task_name STRING
        ,task_type STRING
        ,inst_id STRING
        ,status STRING
        ,owner_id STRING
        ,owner_name STRING
        ,result STRING
        ,start_time DATETIME
        ,end_time DATETIME
        ,input_records BIGINT
        ,output_records BIGINT
        ,input_bytes BIGINT
        ,output_bytes BIGINT
        ,input_tables STRING
        ,output_tables STRING
        ,operation_text STRING
        ,signature STRING
        ,complexity DOUBLE
        ,cost_cpu DOUBLE
        ,cost_mem DOUBLE
        ,settings STRING
        ,ds STRING
    );
    -- Buat tabel backup tunnels_history
    CREATE TABLE IF NOT EXISTS <project_name>.tunnels_history
    (
    tunnel_catalog  STRING
    ,tunnel_schema   STRING
    ,session_id      STRING
    ,operate_type    STRING
    ,tunnel_type     STRING
    ,request_id      STRING
    ,object_name     STRING
    ,partition_spec  STRING
    ,data_size       BIGINT
    ,block_id        BIGINT
    ,offset          BIGINT
    ,length          BIGINT
    ,owner_id        STRING 
    ,owner_name      STRING 
    ,start_time      DATETIME
    ,end_time        DATETIME 
    ,client_ip       STRING 
    ,user_agent      STRING 
    ,object_type     STRING 
    ,columns         STRING 
    ,ds  STRING
    );
    
  2. Di antarmuka DataWorks Data Studio, buat node ODPS SQL bernama history_backup. Konfigurasikan penjadwalan waktu untuk menulis data ke tabel backup tasks_history dan tunnels_history. Klik ikon 保存 di pojok kiri atas untuk menyimpan.

    Berikut contoh perintah node ODPS SQL:

    -- project_name adalah nama proyek MaxCompute. 
    USE <project_name>; 
    -- Backup tasks_history.
    INSERT INTO TABLE <project_name>.tasks_history 
    SELECT task_catalog,task_schema ,task_name,task_type STRING,inst_id,`status`,owner_id,owner_name,result
      ,start_time,end_time,input_records,output_records,input_bytes,output_bytes
      ,input_tables,output_tables,operation_text,signature,complexity,cost_cpu,cost_mem,settings,ds 
      FROM information_schema.tasks_history WHERE ds ='${datetime1}';
    -- Backup tunnels_history.
    INSERT INTO TABLE <project_name>.tunnels_history 
    SELECT tunnel_catalog,tunnel_schema,session_id,operate_type,tunnel_type,request_id,object_name
      ,partition_spec,data_size,block_id,offset,length,owner_id,owner_name,start_time,end_time
      ,client_ip,user_agent,object_type,columns,ds 
      FROM information_schema.tunnels_history WHERE ds ='${datetime1}';
    

    Parameter ${datetime1} adalah parameter penjadwalan DataWorks. Di node ODPS SQL, klik Scheduling Configuration di sebelah kanan. Di bagian Basic Properties, atur Parameters menjadi datetime1=${yyyymmdd}.

    Catatan

    Untuk menganalisis metadata dari beberapa proyek MaxCompute, buat beberapa node ODPS SQL dan tulis metadata dari semua proyek ke tabel backup yang sama.

Langkah 4: Analisis proyek dan item penagihan berbiaya tinggi di Fee Hub

Masuk ke Fee Hub. Gunakan metode berikut untuk menganalisis proyek dan item penagihan berbiaya tinggi. Untuk informasi lebih lanjut, lihat View billing details.

  • Di panel navigasi sebelah kiri, pilih Billing > Billing Details. Atur Statistic Item ke Instance dan Statistical Period ke Day.

    • Metode 1: Temukan proyek (ID instans) dengan biaya tinggi. Jika satu proyek jelas melebihi ekspektasi, analisis proyek tersebut.

    • Metode 2: Temukan item penagihan berbiaya tinggi. Cari proyek tertentu berdasarkan Resource Instance Name/ID, lalu analisis item penagihan berbiaya tinggi untuk proyek tersebut.

  • Di panel navigasi sebelah kiri, pilih Cost Analysis. Di halaman Cost Analysis, Anda juga dapat menemukan item penagihan dengan biaya yang meningkat.

Langkah 5: Identifikasi akar penyebab kenaikan biaya

Analisis proyek dan item penagihan berbiaya tinggi untuk menemukan akar penyebabnya.

Biaya komputasi pekerjaan SQL melebihi ekspektasi

Biaya keseluruhan pekerjaan SQL tinggi (termasuk pekerjaan tabel eksternal), yang mungkin disebabkan oleh satu pekerjaan abnormal, eksekusi berulang, atau konfigurasi penjadwalan yang tidak tepat.

  1. Kueri ID instans (inst_id) pekerjaan berbiaya tinggi untuk melihat detail eksekusinya.

    1. Masuk ke MaxCompute client. Gunakan perintah use untuk beralih ke proyek berbiaya tinggi yang diidentifikasi di Langkah 4. Kueri biaya pekerjaan menggunakan TASKS_HISTORY. Berikut contohnya:

      -- Aktifkan tipe data ODPS 2.0. Untuk detailnya, lihat tipe data ODPS 2.0.
      SET odps.sql.decimal.odps2=true;
      SELECT  
      inst_id ---ID instans
      ,input_bytes ---volume data input
      ,complexity
      ,CAST(input_bytes/1024/1024/1024 * complexity * 0.3 AS DECIMAL(18,5) ) cost_sum
      ,GET_JSON_OBJECT(settings, "$.SKYNET_ID") SKYNET_ID ---ID pekerjaan penjadwalan DataWorks
      FROM    information_schema.tasks_history 
      -- Untuk mengkueri metadata yang lebih tua dari 14 hari, kueri tabel backup yang dibuat di Langkah 3. Nama tabel: <project_name>.tasks_history
      WHERE   task_type = 'SQL' OR task_type = 'SQLRT'
      AND ds = 'partisi tanggal untuk dikueri'
      ORDER BY cost_sum DESC
      LIMIT 10000
      ;
      Catatan
      • Biaya komputasi SQL = Volume data input × Kompleksitas SQL × Harga satuan (USD 0,0438 per GB).

      • Dalam contoh ini, task_type = 'SQL' berarti pekerjaan SQL, sedangkan task_type = 'SQLRT' berarti pekerjaan akselerasi kueri SQL.

    2. Periksa SKYNET_ID (ID pekerjaan penjadwalan DataWorks) dari pekerjaan SQL berbiaya tinggi.

      • Jika memiliki ID, periksa detail eksekusi node di DataWorks.

      • Jika tidak memiliki ID, pekerjaan tersebut tidak dipicu oleh node penjadwalan DataWorks. Gunakan inst_id untuk melihat detail eksekusi. Berikut contohnya:

        SELECT operation_text 
          FROM information_schema.tasks_history 
         WHERE ds='<partisi tanggal eksekusi pekerjaan>' AND inst_id='<inst_id>';
  2. Temukan pekerjaan duplikat yang berjalan berkali-kali.

    1. Masuk ke MaxCompute client. Gunakan perintah use untuk beralih ke proyek berbiaya tinggi yang diidentifikasi di Langkah 4. Kueri pekerjaan duplikat menggunakan TASKS_HISTORY. Berikut contohnya:

      -- Analisis tren pertumbuhan pekerjaan.
      SELECT  signature
              ,ds
              ,COUNT(*) AS tasknum
      FROM    information_schema.tasks_history 
      -- Untuk mengkueri metadata yang lebih tua dari 14 hari, kueri tabel backup yang dibuat di Langkah 3. Nama tabel: <project_name>.tasks_history
      where   task_type = 'SQL' OR task_type = 'SQLRT'
      AND ds >= 'partisi tanggal untuk dikueri'
      GROUP BY ds
               ,signature
      ORDER BY tasknum DESC
      LIMIT   10000
      ;
      
      -- Konfirmasi signature abnormal dan periksa eksekusi terbaru dari pekerjaan SQL yang sesuai
      SELECT  *
      FROM    information_schema.tasks_history 
      -- Untuk mengkueri metadata yang lebih tua dari 14 hari, kueri tabel backup yang dibuat di Langkah 3. Nama tabel: <project_name>.tasks_history
      where   signature = 'signature abnormal'
      AND ds >= 'partisi tanggal untuk dikueri'
      ;

Biaya komputasi Spark melebihi ekspektasi

Pekerjaan Spark memiliki konsumsi keseluruhan yang tinggi. Anda dapat mengkueri inst_id pekerjaan dengan konsumsi abnormal untuk melihat informasi eksekusi spesifiknya.

  1. Masuk ke MaxCompute client. Gunakan perintah use untuk beralih ke proyek berbiaya tinggi yang diidentifikasi di Langkah 4. Kueri biaya pekerjaan menggunakan TASKS_HISTORY. Berikut contohnya:

    -- Aktifkan tipe data ODPS 2.0. Untuk detailnya, lihat tipe data ODPS 2.0.
    SET odps.sql.decimal.odps2=true;
    SELECT  inst_id --ID instans
    ,cost_cpu --konsumsi CPU pekerjaan (100 sama dengan 1 core × detik. Contoh: 10 core berjalan selama 5 detik menghasilkan cost_cpu sebesar 10 × 100 × 5 = 5000).
    ,CAST(cost_cpu/100/3600 * 0.36 AS DECIMAL(18,5) ) cost_sum
    FROM  information_schema.tasks_history 
    -- Untuk mengkueri metadata yang lebih tua dari 14 hari, kueri tabel backup yang dibuat di Langkah 3. Nama tabel: <project_name>.tasks_history
    WHERE   task_type = 'CUPID' AND status='Terminated'
    AND ds = 'partisi tanggal untuk dikueri'
    ORDER BY cost_sum DESC
    LIMIT 10000
    ;
    Catatan
    • Biaya komputasi pekerjaan Spark per hari = Total jam yang dapat ditagih × Harga satuan (USD 0,1041 per jam per task).

    • task_type = 'CUPID' berarti pekerjaan Spark.

  2. Gunakan inst_id untuk melihat detail eksekusi. Berikut contohnya:

    SELECT operation_text 
      FROM information_schema.tasks_history 
    WHERE ds='partisi tanggal eksekusi pekerjaan' AND inst_id='<inst_id>';
    

Biaya pekerjaan MapReduce melebihi ekspektasi

Pekerjaan MapReduce memiliki konsumsi keseluruhan yang tinggi. Anda dapat mengkueri inst_id pekerjaan dengan konsumsi abnormal untuk melihat informasi eksekusi detailnya.

  1. Masuk ke MaxCompute client. Gunakan perintah use untuk beralih ke proyek berbiaya tinggi yang diidentifikasi di Langkah 4. Kueri biaya pekerjaan menggunakan TASKS_HISTORY. Berikut contohnya:

    -- Aktifkan tipe data ODPS 2.0. Untuk detailnya, lihat tipe data ODPS 2.0.
    SET odps.sql.decimal.odps2=true;
    SELECT  inst_id --ID instans
    ,cost_cpu --konsumsi CPU pekerjaan (100 sama dengan 1 core × detik. Contoh: 10 core berjalan selama 5 detik menghasilkan cost_cpu sebesar 10 × 100 × 5 = 5000).
    ,CAST(cost_cpu/100/3600 * 0.36 AS DECIMAL(18,5) ) cost_sum
    FROM    information_schema.tasks_history 
    -- Untuk mengkueri metadata yang lebih tua dari 14 hari, kueri tabel backup yang dibuat di Langkah 3. Nama tabel: <project_name>.tasks_history
    WHERE   task_type = 'LOT' AND status='Terminated'
    AND ds = 'partisi tanggal untuk dikueri'
    ORDER BY cost_sum DESC
    LIMIT 10000
    ;
    

  2. Gunakan inst_id untuk melihat detail eksekusi. Berikut contohnya:

    SELECT operation_text 
      FROM information_schema.tasks_history 
    WHERE ds='partisi tanggal eksekusi pekerjaan' AND inst_id='<inst_id>';
    

Biaya penyimpanan melebihi ekspektasi

Gunakan Usage Details untuk mengkueri biaya penyimpanan.

  1. Unduh rincian penggunaan. Untuk detailnya, lihat Download usage details.

  2. Unggah rincian penggunaan. Untuk detailnya, lihat Upload usage details data to MaxCompute.

  3. Analisis rincian penggunaan menggunakan SQL. Untuk detailnya, lihat Analyze MaxCompute billing usage details.

Biaya trafik downstream jaringan publik melebihi ekspektasi

Biaya keseluruhan trafik downstream jaringan publik tinggi. Gunakan langkah-langkah berikut untuk menemukan periode waktu dan kategori mana yang memiliki biaya unduh tinggi.

  1. Masuk ke MaxCompute client. Gunakan perintah use untuk beralih ke proyek berbiaya tinggi yang diidentifikasi di Langkah 4. Kueri biaya unduh menggunakan TUNNELS_HISTORY. Berikut contohnya:

    -- Aktifkan tipe data ODPS 2.0. Untuk detailnya, lihat tipe data ODPS 2.0.
    set odps.sql.decimal.odps2=true;
    SELECT  ds
            ,operate_type
            ,SUM(CAST(data_size / 1024 / 1024 / 1024 * 0.8 AS DECIMAL(18,5))) download_fee
    FROM    information_schema.tunnels_history
    WHERE   operate_type = 'DOWNLOADLOG'
    OR      operate_type = 'DOWNLOADINSTANCELOG'
    AND     ds >= 'partisi tanggal untuk dikueri'
    GROUP BY ds
             ,operate_type
    ORDER BY download_fee DESC
    ;
    Catatan

    Biaya unduh = Volume data yang diunduh × Harga satuan (USD 0,1166 per GB).

  2. Anda juga dapat menganalisis tren biaya unduh dari waktu ke waktu menggunakan hasil kueri. Selain itu, jalankan perintah tunnel show history untuk melihat riwayat detail. Untuk referensi perintah lengkap, lihat Tunnel commands. image

Informasi lebih lanjut

Untuk artikel lain tentang optimalisasi biaya, lihat Cost optimization overview.