暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Vertica(五)开发相关2

南山笔记 2021-05-13
802

提及到数据库开发,SQL的优化是绕不过去的坎,Vertica提供了比较丰富的分析手段,可以帮助开发者观察SQL的执行情况,发生的事件,以及执行过程最慢的路径,可以方便快速的了解如何调整或者优化所开发的SQL。

Vertica执行SQL时采用基于成本的优化器生成执行计划,选择成本最低的执行计划去执行。

开发阶段,可以通过explain verbose语句,查看vertica为SQL所选择的执行计划。

    EXPLAIN VERBOSE
    SELECT customer_name, customer_state FROM customer_dimension
    WHERE customer_state IN ('MA','NH') AND customer_gender='Male'
    ORDER BY customer_name 
    LIMIT 10;

    如下图,可以看到针对上述语句,执行计划分为3个部分,绿色部分是第一阶段执行,从底层表中获取数据和过滤数据,第二是对结果进行排序,第三阶段则限制只返回10条记录。

    对于管理人员,Vertica提供了SQL执行的视图,便于快速找出需要优化的SQL,以及分析如何优化。

    1 找出耗时较长的语句

      SELECT
      (query_duration_us/1000000)::NUMERIC(10,3) duration_sec,
      session_id,
      transaction_id,
      statement_id,
      node_name,
          LEFT(query,100)
      FROM query_profiles
      WHERE query_start BETWEEN '2020-05-02 15:00:0' AND '2020-05-02 22:00:00'
      ORDER BY duration_sec DESC;

      2 查看语句当时的执行计划,从上述语句中获取SQL执行时的事务号和语句ID,代入下面语句:

        Select * from QUERY_PLAN_PROFILES 
        WHERE transaction_id = 45035996273706380
        and statement_id=1;

        3 除了查看执行计划是否合理或可优化,也需要分析语句执行期间的事件情况

          SELECT node_name, event_type, event_description,
          operator_name, path_id, event_details, suggested_action
          FROM query_events 
          WHERE transaction_id = 45035996273706380 
          AND statement_id = 1 
          ORDER BY node_name;

          4 识别语句执行过程中的最慢执行路径,有助于针对性的优化。这里的时间单位是微秒。

            SELECT
            operator_name,
            path_id,
            SUM(counter_value)
            FROM execution_engine_profiles
            WHERE transaction_id = 45035996273706380
            AND statement_id = 1
            AND counter_name ILIKE 'execution%'
            GROUP BY operator_name, path_id
            ORDER BY 3 DESC LIMIT 20;

            上述的过程,与Oracle数据库的分析过程基本一致,如果是从Oracle数据库转过来的开发人员,上手分析应该还是比较快捷的。

            文章转载自南山笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论