前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL命令 TUNE TABLE

SQL命令 TUNE TABLE

作者头像
用户7741497
发布2022-05-07 10:58:17
6330
发布2022-05-07 10:58:17
举报
文章被收录于专栏:hml_知识记录

基于代表性数据调优表。

大纲

代码语言:javascript
复制
TUNE TABLE tablename [ tune_options ]

参数

  • tablename - 要调优的现有表的名称。 表名可以是限定的(schema.table),也可以是非限定的(table)。 非限定表名接受默认模式名。
  • tune_options - 可选—如果指定,一个或多个TUNE TABLE选项,以任意顺序指定,由空格分隔。 这些tune_options不区分大小写。

描述

TUNE TABLE命令根据表中当前的数据对现有表进行调优。 该数据应该代表表完全填充时所期望的数据。

TUNE TABLE根据代表性数据计算和设置表的块大小、选择性和范围大小。 通常,TUNE TABLE设置一个或多个这些值,并清除所有使用这个持久类(表)的缓存查询,以便查询将使用这些新值。 但是,如果TUNE TABLE没有更改这些值(例如,自上次对该表运行TUNE TABLE以来数据没有更改),则缓存查询不会被清除,该表的类定义也不会被标记为需要重新编译。

TUNE TABLE更新SQL表定义(因此需要特权来更改表定义)。 通常,TUNE TABLE还会更新相应的持久类定义。 这允许查询优化器使用调优后的值,而不需要进行类编译。 但是,如果部署了类,那么TUNE TABLE只更新SQL表定义; 查询优化器间接使用表定义中的调优值。

如果TUNE TABLE成功,它将SQLCODE设置为0。 如果指定的表名不存在,TUNE TABLE将发出SQLCODE -30错误。

权限

TUNE TABLE命令是一个特权操作。 用户必须具有%ALTER_TABLE管理权限才能执行TUNE TABLE。 如果不这样做,将导致%msgSQLCODE -99错误,User 'name' does not have %ALTER_TABLE privileges。 如果拥有适当的权限,可以使用GRANT命令为用户或角色分配%ALTER_TABLE权限。 管理权限是特定于名称空间的。

用户必须对指定的表具有%ALTER权限。 如果用户是表的Owner(创建者),则自动授予该用户对该表的%ALTER权限。 否则,用户必须被授予%ALTER权限。 如果不这样做,将导致一个带有%msgSQLCODE -99错误。 可以通过调用%CHECKPRIV命令来确定当前用户是否具有%ALTER权限。 可以使用GRANT命令为指定的表分配%ALTER权限。

调表选项

  • %KEEP_UP_TO_DATE:如果未指定(默认值),则未设置修改后的类定义上的最新标志。 这表明类定义已经过期,并且被标记为需要重新编译。 如果指定,则类定义将保持标记为最新的。 这是在活动系统上更改统计信息时的首选选项,因为它降低了重新编译表类定义的可能性。
  • %CLEAR_VALUES:如果指定了现有的SELECTIVITY, EXTENTSIZE等值将从类和表定义中清除。 不指定此选项将提供默认的调优表行为。
  • %SAMPLE_PERCENT百分比:指定用于对TuneTable实用程序的数据进行抽样的表行的百分比。 这个百分比可以指定为。####%; 例如,在采样数据时,.1212%将导致TuneTable使用表中12%的行。 指定大于0且小于等于100%的百分比值; 超出此范围的值将发出SQLCODE -1错误。 这个值通常不需要指定。 仅当字段的潜在离群值不是均匀分布在整个表的行中时指定此值。 注意,对于任何区段大小< 1000行的表,无论%SAMPLE_PERCENT值如何,整个区段都将由TuneTable使用。
  • %RECOMPILE_CQ:如果指定了,TuneTable将使用新的调优表统计信息重新编译缓存的查询类,而不仅仅是清除调优表的缓存查询。 不指定此选项将提供默认的TuneTable行为。

如果指定的tune_options值不存在,TUNE TABLE将发出SQLCODE -25错误。 如果两次指定相同的tune_options值,TUNE TABLE将发出SQLCODE -326错误。

缓存查询

执行TUNE TABLE将创建一个缓存查询。 显示“Show Plan”表示没有创建查询计划。 未创建SQL语句。 缓存的查询对名称空间是通用的; 在具体的表格中没有列出。 可以使用缓存查询重新运行相同的TUNE TABLE语句。

执行TUNE TABLE将清除指定表的所有现有缓存查询,包括上次执行TUNE TABLE的缓存查询。 可以选择让TUNE TABLE使用新的TUNE TABLE值重新编译所有这些缓存的查询。

如果运行TUNE TABLE没有更改任何TUNE TABLE值,则不会清除缓存的查询。

运行调优表的其他方法

有两个其他接口运行Tune Table:

  • 通过使用Management Portal SQL接口Actions下拉列表,您可以在单个表或模式中的所有表上运行Tune Table
  • 为单个表或当前名称空间中的所有表调用$SYSTEM.SQL.Stats.Table.GatherTableStats()方法。

示例

下面的动态SQL示例调优一个表:

代码语言:javascript
复制
ClassMethod TuneTable()
{
    try {
        s mysql = "TUNE TABLE Sample.MyTest %KEEP_UP_TO_DATE"
        s tStatement = ##class(%SQL.Statement).%New()
        s qStatus = tStatement.%Prepare(mysql)
        if qStatus '= 1 {
            w "%Prepare failed:" 
            d $System.Status.DisplayError(qStatus) 
            q
        }
        s rset = tStatement.%Execute()
        if rset.%SQLCODE = 0 { 
            w !,"Executed Tune Table",! 
        } else { 
            s badSQL=##class(%Exception.SQL).%New(,rset.%SQLCODE,,rset.%Message)
            throw badSQL }
        ret
    }
    catch exp { 
        w "In the CATCH block",!
        if 1 = exp.%IsA("%Exception.SQL") {
            w "SQLCODE: ",exp.Code,!
            w "Message: ",exp.Data,! 
        } else { 
            w "Not an SQL exception",! 
        }
        ret
    }
}

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 大纲
    • 参数
    • 描述
      • 权限
        • 调表选项
          • 缓存查询
            • 运行调优表的其他方法
            • 示例
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档