更新时间:2024-02-05 GMT+08:00

查询SQL执行信息

功能介绍

该接口用于查询SQL执行信息。

调用方法

请参见如何调用API

URI

GET /v1/{project_id}/clusters/{cluster_id}/dms/queries/{query_id}
表1 路径参数

参数

是否必选

参数类型

描述

project_id

String

项目ID。获取方法,请参见获取项目ID

cluster_id

String

集群ID。获取方法,请参见获取集群ID

query_id

String

查询ID。

表2 Query参数

参数

是否必选

参数类型

描述

ctime

Long

采集时间。

请求参数

响应参数

状态码: 200

表3 响应Body参数

参数

参数类型

描述

code

Integer

响应码。

msg

String

响应信息。

data

ListQueriesDto object

响应数据。

表4 ListQueriesDto

参数

参数类型

描述

virtual_cluster_id

Integer

虚拟集群ID

ctime

Long

采集时间

pid

String

会话id。

inst_name

String

实例名称。

waiting

Boolean

如果后台当前正等待锁则为true。

enqueue

String

工作负载管理资源状态。

warning

String

主要显示如下几类告警信息以及sql自诊断调优相关告警。

query

String

查询语句。

lane

String

快慢车道 (fast or slow)。

db_name

String

数据库名称。

priority

String

job在资源池中的优先级,取值:1,2,4,8(rush、high、medium、low)。

query_id

String

语句执行使用的内部query_id。

query_band

String

用于标示作业类型,可通过guc参数query_band进行设置,默认为空字符串。

job_name

String

这个值是从query_band的字段中取出来的,位置0。

job_inst

String

这个值是从query_band的字段中取出来的,位置1。

user_name

String

连接到后端的用户名。

application_name

String

连接到后端的应用名。

client_address

String

连接到后端的客户端的ip地址。

client_hostname

String

客户端的主机名。

client_port

String

客户端用于与后端通讯的tcp端口号。

start_time

Long

语句执行的开始时间。

block_time

Long

语句执行前的阻塞时间 (单位ms)。

duration

Long

语句已经执行的时间 (单位ms)。

estimate_total_time

Long

语句执行预估总时间 (单位ms)。

estimate_left_time

Long

语句执行预估剩余时间 (单位ms)。

resource_pool

String

用户使用的资源池。

control_group

String

语句所使用的cgroup。

min_peak_memory

Integer

语句在所有dn上的最小内存峰值 (单位mb)。

max_peak_memory

Integer

语句在所有dn上的最大内存峰值 (单位mb)。

average_peak_memory

Integer

语句执行过程中的内存使用平均值 (单位mb)。

memory_skew_percent

Integer

语句在各dn间的内存使用倾斜率。

estimate_memory

Integer

语句预估使用内存 (单位mb)。

spill_info

String

语句在所有dn上的下盘信息。

min_spill_size

Integer

若发生下盘,所有dn上下盘的最小数据量 (单位mb) 默认为0。

max_spill_size

Integer

若发生下盘,所有dn上下盘的最大数据量 (单位mb) 默认为0。

average_spill_size

Integer

若发生下盘,所有dn上下盘的平均数据量 (单位mb) 默认为0。

spill_skew_percent

Integer

若发生下盘,dn间下盘倾斜率。

min_dn_time

Long

语句在所有dn上的最小执行时间 (单位ms)。

max_dn_time

Long

语句在所有dn上的最大执行时间 (单位ms)。

average_dn_time

Long

语句在所有dn上的平均执行时间 (单位ms)。

dntime_skew_percent

Integer

语句在各dn间的执行时间倾斜率。

min_cpu_time

Long

语句在所有dn上的最小cpu时间 (单位ms)。

max_cpu_time

Long

语句在所有dn上的最大cpu时间 (单位ms)。

total_cpu_time

Long

语句在所有dn上的cpu总时间 (单位ms)。

cpu_skew_percent

Integer

语句在各dn间的cpu时间倾斜率。

average_peak_iops

Integer

语句在所有dn上的每秒平均io峰值(列存单位是次/s,行存单位是万次/s)。

iops_skew_percent

Integer

语句在dn间的io倾斜率。

max_peak_iops

Integer

语句在所有dn上的每秒最大io峰值(列存单位是次/s,行存单位是万次/s)。

min_peak_iops

Integer

语句在所有dn上的每秒最小io峰值(列存单位是次/s,行存单位是万次/s)。

query_plan

String

查询计划。

query_status

String

当前查询语句的实时运行状态 (active, idle, idle in transaction, idle in transaction(aborted), fastpath function call, disabled)。

wlm_status

String

当前查询语句在资源池上的运行状态 (pending, running, finished, aborted, active, unknown)。

wlm_attrib

String

语句的属性 (ordinary, simple, complicated, internal)

system_query

Boolean

是否系统查询。

backend_start

Long

该过程开始的时间,即当客户端连接服务器时。

elapsed_time

Long

到目前为止的执行时间。

curr_xact_start

Long

启动当前事务的时间,如果没有事务是活跃的,则为null。如果当前查询是首个事务,则这列等同于query_start列。

state_change

Long

上次状态改变的时间。

query_start

Long

语句执行的开始时间。

query_elapsed_time

Long

语句当前为止的实际执行时间(单位:s)。

请求示例

https://{Endpoint}/v1/{project_id}/clusters/{cluster_id}/dms/queries/{query_id}?ctime=1699062846000

响应示例

状态码: 200

{
  "code" : 0,
  "msg" : "OK",
  "data" : {
    "ctime" : 1699062846000,
    "pid" : "140535026615872",
    "waiting" : false,
    "duration" : 0,
    "enqueue" : "",
    "warning" : "",
    "query" : "WLM fetch collect info from data nodes",
    "lane" : "",
    "priority" : null,
    "virtual_cluster_id" : 0,
    "inst_name" : "cn_5002",
    "db_name" : "postgres",
    "query_id" : "145522562959855061",
    "query_band" : "",
    "job_name" : "",
    "job_inst" : "",
    "user_name" : "Ruby",
    "application_name" : "workload",
    "client_address" : "",
    "client_hostname" : "",
    "client_port" : "",
    "start_time" : 0,
    "block_time" : 0,
    "estimate_total_time" : 0,
    "estimate_left_time" : 0,
    "resource_pool" : "default_pool",
    "control_group" : "",
    "min_peak_memory" : 0,
    "max_peak_memory" : 0,
    "average_peak_memory" : 0,
    "memory_skew_percent" : 0,
    "estimate_memory" : 0,
    "spill_info" : "",
    "min_spill_size" : 0,
    "max_spill_size" : 0,
    "average_spill_size" : 0,
    "spill_skew_percent" : 0,
    "min_dn_time" : 0,
    "max_dn_time" : 0,
    "average_dn_time" : 0,
    "dntime_skew_percent" : 0,
    "min_cpu_time" : 0,
    "max_cpu_time" : 0,
    "total_cpu_time" : 0,
    "cpu_skew_percent" : 0,
    "average_peak_iops" : 0,
    "iops_skew_percent" : 0,
    "max_peak_iops" : 0,
    "min_peak_iops" : 0,
    "query_plan" : "",
    "query_status" : "active",
    "wlm_status" : "",
    "wlm_attrib" : "",
    "system_query" : false,
    "backend_start" : 0,
    "elapsed_time" : 0,
    "curr_xact_start" : 0,
    "state_change" : 0,
    "query_start" : 0,
    "query_elapsed_time" : 0
  }
}

SDK代码示例

SDK代码示例如下。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package com.huaweicloud.sdk.test;

import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.exception.ServiceResponseException;
import com.huaweicloud.sdk.dws.v2.region.DwsRegion;
import com.huaweicloud.sdk.dws.v2.*;
import com.huaweicloud.sdk.dws.v2.model.*;


public class ShowQueryDetailSolution {

    public static void main(String[] args) {
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        String ak = System.getenv("CLOUD_SDK_AK");
        String sk = System.getenv("CLOUD_SDK_SK");

        ICredential auth = new BasicCredentials()
                .withAk(ak)
                .withSk(sk);

        DwsClient client = DwsClient.newBuilder()
                .withCredential(auth)
                .withRegion(DwsRegion.valueOf("<YOUR REGION>"))
                .build();
        ShowQueryDetailRequest request = new ShowQueryDetailRequest();
        request.withCtime(<ctime>L);
        try {
            ShowQueryDetailResponse response = client.showQueryDetail(request);
            System.out.println(response.toString());
        } catch (ConnectionException e) {
            e.printStackTrace();
        } catch (RequestTimeoutException e) {
            e.printStackTrace();
        } catch (ServiceResponseException e) {
            e.printStackTrace();
            System.out.println(e.getHttpStatusCode());
            System.out.println(e.getRequestId());
            System.out.println(e.getErrorCode());
            System.out.println(e.getErrorMsg());
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# coding: utf-8

from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkdws.v2.region.dws_region import DwsRegion
from huaweicloudsdkcore.exceptions import exceptions
from huaweicloudsdkdws.v2 import *

if __name__ == "__main__":
    # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak = os.getenv("CLOUD_SDK_AK")
    sk = os.getenv("CLOUD_SDK_SK")

    credentials = BasicCredentials(ak, sk) \

    client = DwsClient.new_builder() \
        .with_credentials(credentials) \
        .with_region(DwsRegion.value_of("<YOUR REGION>")) \
        .build()

    try:
        request = ShowQueryDetailRequest()
        request.ctime = <ctime>
        response = client.show_query_detail(request)
        print(response)
    except exceptions.ClientRequestException as e:
        print(e.status_code)
        print(e.request_id)
        print(e.error_code)
        print(e.error_msg)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package main

import (
	"fmt"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
    dws "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/dws/v2"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/dws/v2/model"
    region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/dws/v2/region"
)

func main() {
    // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak := os.Getenv("CLOUD_SDK_AK")
    sk := os.Getenv("CLOUD_SDK_SK")

    auth := basic.NewCredentialsBuilder().
        WithAk(ak).
        WithSk(sk).
        Build()

    client := dws.NewDwsClient(
        dws.DwsClientBuilder().
            WithRegion(region.ValueOf("<YOUR REGION>")).
            WithCredential(auth).
            Build())

    request := &model.ShowQueryDetailRequest{}
	ctimeRequest:= int64(<ctime>)
	request.Ctime = &ctimeRequest
	response, err := client.ShowQueryDetail(request)
	if err == nil {
        fmt.Printf("%+v\n", response)
    } else {
        fmt.Println(err)
    }
}

更多编程语言的SDK代码示例,请参见API Explorer的代码示例页签,可生成自动对应的SDK代码示例。

状态码

状态码

描述

200

查询SQL执行信息成功。

400

请求错误。

401

鉴权失败。

403

没有操作权限。

404

找不到资源。

500

服务内部错误。

503

服务不可用。