• 35-SQLServer定期导出慢SQL到excel文件


    一、总结

    1、把执行结果导出到txt或csv文件时,如果慢SQL的脚本过程,会截断文本,并且会换行,所以这里导出到excel文件。

    2、每次执行作业之前,生成的文件名不能已经存在,不然会报错,所以要每次执行完之后,重命名一下(具体操作见下面的步骤),错误如下:

     二、操作步骤

    1、查询慢SQL的脚本

    注:这里查询的是平均执行时间超过3秒的SQL

    =====================================================

    SET NOCOUNT ON
    SELECT
    total_elapsed_time / 1000 N'总花费时间ms' ,
    ( total_elapsed_time / execution_count ) / 1000 N'平均时间ms' ,
    execution_count N'执行次数' ,
    SUBSTRING(st.text, ( qs.statement_start_offset / 2 ) + 1,
    ( ( CASE statement_end_offset
    WHEN -1 THEN DATALENGTH(st.text)
    ELSE qs.statement_end_offset
    END - qs.statement_start_offset ) / 2 ) + 1) N'执行语句'

    FROM sys.dm_exec_query_stats AS qs
    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
    WHERE SUBSTRING(st.text, ( qs.statement_start_offset / 2 ) + 1,
    ( ( CASE statement_end_offset
    WHEN -1 THEN DATALENGTH(st.text)
    ELSE qs.statement_end_offset
    END - qs.statement_start_offset ) / 2 ) + 1) NOT LIKE '%fetch%'
    and (( total_elapsed_time / execution_count ) / 1000) >3000
    ORDER BY total_elapsed_time / execution_count DESC;

    ====================================================

    2、生成SSIS包

    注:随便点击一个库右键导出数据即可,因为我们在后面会指定执行的SQL

     

     

     

     

     

     

     

     

     

     3、查看部署的SSIS包

     

     4、创建代理作业定期执行SSIS包

     

     

     

     

     

    powershell脚本:

    ==================================================

    $today=Get-Date
    $formatDate=$today.ToString('yyyyMMdd')


    rename-Item 'D:excel人力资源数据库.xls' -NewName 人力资源数据库_$formatDate.xls

    ==================================================

     

     

     5、执行包测试结果

     

     

    ***************************************************

    如下是个人开发系统,欢迎大家体验,纯属个人爱好,想一块玩的,私信。

    易本浪账:www.jialany.com  

    ***************************************************

  • 相关阅读:
    深入理解JVM之JVM内存区域与内存分配
    Spring MVC配置文件的三个常用配置详解
    spring Bean类自动装载实现
    深入理解Java之线程池
    java 通过反射机制调用某个类的方法
    InvocationHandler中invoke()方法的调用问题
    线程 synchronized锁机制
    Java 并发编程:volatile的使用及其原理
    Java 修饰符
    Set、List、Map的区别和联系
  • 原文地址:https://www.cnblogs.com/jialanyu/p/13141847.html
Copyright © 2020-2023  润新知