AI特性
enable_hypo_index
参数说明:该参数控制数据库的优化器进行EXPLAIN时是否创建虚拟索引。通过对特定的查询语句执行explain,用户可根据优化器给出的执行计划评估该索引是否能够提升该查询语句的执行效率。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示在进行EXPLAIN时创建虚拟索引。
- off:表示在进行EXPLAIN时不创建虚拟索引。
默认值:off
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:根据业务需要进行调整。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
db4ai_snapshot_mode
参数说明:snapshot有2种模式:MSS(物化模式,存储数据实体)和CSS(计算模式,存储增量信息)。该参数可在PDB级别设置。
参数类型:字符串
参数单位:无
取值范围:"MSS","CSS"
- "MSS":表示物化模式,db4ai在创建快照的时候存储数据实体。
- "CSS":表示计算模式,db4ai在创建快照的时候存储增量信息。
默认值:"MSS"。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:建议设置为默认值,可以根据实际业务需要进行调整。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
db4ai_snapshot_version_delimiter
参数说明:该参数为数据表快照版本分隔符。该参数可在PDB级别设置。
参数类型:字符串
参数单位:无
取值范围:字符串长度需设置为1,即一个字符,如:"@","#"等,需要注意的是"!"是非法字符。
默认值:"@"。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
db4ai_snapshot_version_separator
参数说明:该参数用于指定数据表快照子版本分隔符。该参数可在PDB级别设置。
参数类型:字符串
参数单位:无
取值范围:字符串长度需设置为1,即一个字符,如:"@","#"等,需要注意的是"?"是非法字符。
默认值:"."。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
enable_ai_stats
参数说明:该参数用于指定是否创建或者使用智能统计信息。该参数可在PDB级别设置。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示创建并且使用智能统计信息。
- off:表示不创建或者不适用智能统计信息。
默认值:on。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:数据库运行过程中修改可能会造成计划劣化。
multi_stats_type
参数说明:该参数用于指定在enable_ai_stats为on状态下创建的统计信息类别。该参数可在PDB级别设置。
参数类型:枚举类型
参数单位:无
取值范围:有效值为“BAYESNET”、“MCV”、“ALL”。
- "BAYESNET":只创建智能统计信息。
- "MCV":只创建传统统计信息。
- "ALL":同时创建传统统计信息和智能统计信息。
默认值:"BAYESNET"。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
ai_stats_cache_limit
参数说明:该参数用于指定在enable_ai_stats为on状态下最多缓存的模型数量。该参数可在PDB级别设置。
参数类型:整型
参数单位:个
取值范围:30 ~ 1000。
默认值:100。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:建议根据使用多列统计信息模型数量设置。
设置不当的风险与影响:最大缓存个数设置过大会占用不必要的内存,参数设置过小会频繁从硬盘读取模型,造成系统性能下降。
enable_operator_prefer
参数说明:该参数用于指定是否开启算子倾向性规则,在估计代价相近的情况下,倾向于选择参数化路径执行表连接。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示开启参数化路径优先。
- off:表示不开启参数化路径优先。
默认值:off
此参数生效有两个必要的前置条件:
- 参数化路径被生成。
- 参数化路估计的代价和其他索引扫描算子类似。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:建议设置为默认值,推荐只在session或者hint内指定该参数设置。
设置不当的风险与影响:修改此参数会有严重的计划劣化风险。
enable_cachedplan_mgr
参数说明:该参数用于指定是否开启自适应计划选择功能。自适应计划选择弥补了传统单一缓存计划无法根据查询条件参数进行变化带来的性能问题,并且避免了频繁调用查询优化。开启此功能后,用户可以通过维护多个缓存计划实现适应不同的查询参数,从而提升查询执行性能。该参数可在PDB级别设置。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示开启自适应计划选择功能。
- off:表示不开启自适应计划选择功能。
默认值:on。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:开启此参数有助于提升查询性能,关闭此参数可能导致查询性能的降低。
max_stmt_aplan_num
参数说明:该参数用于控制自适应计划选择每个查询的候选计划个数上限。该参数可在PDB级别设置。
参数类型:整型
参数单位:个
取值范围:0 ~ 20
默认值:5。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:参数数值过高可能导致功能消耗太多内存影响业务运行资源,数值过低可能导致功能无法缓存计划,增高时延。
recommend_session_aplan_memory
参数说明:该参数用于控制自适应计划选择每个session中的候选计划内存上限,大于或者等于这个值之后将不再在内存中插入新的候选计划,该参数可在PDB级别设置。
参数类型:整型
参数单位:kB
取值范围:1024 ~ 102400
默认值:5120。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。取值不能带单位。
设置建议:推荐使用默认值。
设置不当的风险与影响:参数数值过高可能导致功能消耗太多内存影响业务运行资源,数值过低可能导致功能无法缓存计划,增高时延。
repick_plan_min_duration
参数说明:该参数用于控制探测到的计划的可用下限,在策略探测时,如果被探测策略的执行时间不小于cplan的repick_plan_min_duration倍,将直接报错。注意设置为0的时候表示关闭报错机制。该参数可在PDB级别设置。
参数类型:整型
参数单位:无
取值范围:0 ~ 2147483647
默认值:0。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:参数数值大于0可能会造成语句运行报错,数值越低,报错可能越高;数值过高可能会让错误计划长时间执行占用系统资源。
enable_adaptive_cost
参数说明:该参数为基于反馈的优化器基数和代价矫正功能的总开关,打开后开启算子信息收集流程和基数估计流程,后端模型维护的启动线程会随此参数开关启动或退出。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示开启算子信息流程和基数估计流程。
- off:表示关闭算子信息流程和基数估计流程。
默认值:
- on:新安装的数据库的默认值。
- off:505.1.0版本之前的数据库升级后的默认值。
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。请根据查询语句是否需要自动调优开启/关闭此参数。
设置不当的风险与影响:不需要该功能的场景下,比如业务中不存在需要调优的复杂语句时,打开功能会占用更多系统资源。
enable_feedback_cardest
参数说明:该参数为另外设置的基于反馈的优化器基数和代价矫正功能的开关,用于开发人员诊断模型相关问题。当enable_adaptive_cost参数设置为off,该参数设置为on时,算子信息仍会被收集,反馈基数估计接口仍会被调用,但此时后端自动模型维护的线程不会被启用,开发人员可以通过gs_acm_analyze_workload_manual()函数手动训练模型诊断问题。该参数可在PDB级别设置。
参数类型:布尔型
参数单位:无
取值范围:
- on:算子信息会被收集,且反馈基数估计接口仍会被调用,但后端自动模型维护的线程并不会被启用。
- off:控制完全交由enable_adaptive_cost参数控制。
默认值:
- on:新安装的数据库的默认值
- off:505.1.0版本之前的数据库升级后的默认值
- 在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
adaptive_cardest_strategy
参数说明:该参数用于设置选择基数估计模型偏好。该参数可在PDB级别设置。
参数类型:枚举类型
参数单位:无
取值范围:"auto"、"use_statistics"、"use_feedback"
- "auto":自适应模式,自动根据估计的历史准确性判断是使用统计方法还是反馈方法。
- "use_statistics":优先使用统计信息做基数估计。
- "use_feedback":优先使用反馈模型做基数估计。
默认值:"auto"。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:运行过程中修改该参数有计划劣化风险。
maximal_feedback_model_num
参数说明:该参数用于设置基数反馈模型数量上限,超过此上限后不再训练新的模型。
参数类型:整型
参数单位:个
取值范围:-1 ~ 1000000。值为-1表示无上限。
默认值:10000
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:如果基数反馈模型数量上限设置过小,可能会因无法训练新的模型而导致反馈基数估计功能失效;如果数量上限设置过大,可能会占用过多的磁盘空间,造成性能下降。
feedback_model_cache_limit
参数说明:该参数用于设置控制基数反馈模型在全局内存最大缓存个数。
参数类型:整型
参数单位:个
取值范围:10 ~ 100000
默认值:500
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:最大缓存个数设置过大会占用不必要的内存,参数设置过小会频繁从硬盘读取模型,造成系统性能下降。
feedback_model_expired_time
参数说明:该参数用于设置基数反馈模型超时时间,过期的模型会定期被清理。
参数类型:整型
参数单位:毫秒(ms)
取值范围:500 ~ 2147483647
默认值:86400000(即1d)
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。例如,不带单位取值6000,表示feedback_model_expired_time为6000ms;带单位取值1min,表示feedback_model_expired_time为1min(60000ms)。取值如果要加上单位,必须为“ms”,“s”,“min”,“h”,“d”。
设置建议:推荐使用默认值。
设置不当的风险与影响:如果超时时间设置过长会造成系统性能下降;如果设置过短会导致模型被清理频率过高而影响功能。
feedback_collection_expired_time
参数说明:该参数用于设置基数反馈模型超时时间,过期的算子模型会定期被清理。
参数类型:整型
参数单位:毫秒(ms)
取值范围:50 ~ 2147483647
默认值:3600000(即1h)
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。例如,不带单位取值6000,表示feedback_collection_expired_time为6000ms;带单位取值1min,表示feedback_collection_expired_time为1min(60000ms)。取值如果要加上单位,必须为“ms”,“s”,“min”,“h”,“d”。
设置建议:推荐使用默认值。
设置不当的风险与影响:如果超时时间设置过长会造成系统性能下降;如果设置过短会导致反馈数据被清理频率过高而影响功能。
adaptive_cost_min_time
参数说明:该参数用于设置基数反馈收集的SQL时间阈值,只有执行时间大于该值的语句反馈会被收集。该参数可在PDB级别设置。
参数类型:整型
参数单位:毫秒(ms)
取值范围:0 ~ 2147483647
默认值:1000。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。例如,不带单位取值6000,表示adaptive_cost_min_time为6000ms;带单位取值1min,表示adaptive_cost_min_time为1min(60000ms)。取值如果要加上单位,必须为“ms”,“s”,“min”,“h”,“d”。
设置建议:建议设置为需要调优的慢查询执行时长的20%。
设置不当的风险与影响:如果时间参数设置过短,最严重造成1-2%系统性能下降;如果设置过长则会导致能够被自动调优的查询不在功能生效范围内。
cost_update_window_size
参数说明:该参数用于调整收集用于回归的数据的滑动窗口大小。该参数可在PDB级别设置。
参数类型:整型
参数单位:个
取值范围:1 ~ 20
默认值:5。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:参数值小于3可能会导致估计代价参数过拟合与实际情况产生误差,使优化器生成错误的执行计划。
adaptive_costest_strategy
参数说明:该参数用于设置代价评估使用新/旧代价的策略。该参数可在PDB级别设置。
参数类型:枚举类型
参数单位:无
取值范围:
- L0:只有在基数估计正确(比如使用反馈基数估计)的时候才会触发新代价。
- L1:优先使用新的代价模型计算。
默认值:L0。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:建议设置为默认值,推荐只在session或者hint内修改该参数设置。
设置不当的风险与影响:参数设置为L1时有严重的计划劣化风险。
adaptive_costmodel_calibration_interval
参数说明:该参数用于设置代价模型矫正逻辑的间隔时间。
参数类型:整型
参数单位:毫秒(ms)
取值范围:0 ~ 2147483647。0表示关闭自动触发代价模型矫正功能。
默认值:3600000(即1h)
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。例如,不带单位取值6000,表示adaptive_costmodel_calibration_interval为6000ms;带单位取值1min,表示adaptive_costmodel_calibration_interval为1min(60000ms)。取值如果要加上单位,必须为“ms”,“s”,“min”,“h”,“d”。
设置建议:推荐使用默认值。
设置不当的风险与影响:如果该参数设置过小会导致代价模型经常触发矫正功能从而造成系统性能劣化;如果设置过大会导致模型矫正不及时从而使功能优化效果不佳。
unix_socket_directory
参数说明:用于指定unix_socket通信方式中,文件存放的路径。此参数只能在配置文件gaussdb.conf中指定。在启动fenced模式前需要设定该GUC参数。
参数类型:字符串
参数单位:无
取值范围:合法目录路径。
默认值:""
设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
enable_ai_watchdog
参数说明:开启或关闭AI Watchdog功能。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示开启。
- off:表示关闭。
默认值:on
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:功能打开会占用系统资源。
enable_ai_watchdog_forcible_oom_detection
参数说明:强制开启或关闭AI Watchdog的OOM探测功能,若关闭该参数,则会自动根据当前数据库的规格判断是否需要启动OOM探测功能。自动判断模式下,对于max_process_memory设置为64GB及以上的场景,才会启动OOM探测功能。由于OOM探测功能依赖内存管理模块获取的信息,因此,如果内存管理模块未开启或失效,则OOM探测功能也不会启用。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示开启。
- off:表示关闭。
默认值:off
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:功能打开会占用系统资源。
enable_ai_watchdog_healing
参数说明:开启或关闭AI Watchdog的自愈功能。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示开启。
- off:表示关闭。
默认值:on
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
ai_watchdog_max_cpu_usage
参数说明:预期的数据库CPU使用率上限,该值会根据多核情况进行归一化。该参数值设置为0时,表示不判断CPU使用率情况。
参数类型:浮点型
参数单位:无
取值范围:0 ~ 1
默认值:0.8
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:设置过大,可能会导致无法及时发现异常。
ai_watchdog_oom_dynamic_used_threshold
参数说明:预期的数据库动态内存使用率上限。
参数类型:浮点型
参数单位:无
取值范围:0 ~ 1
默认值:0.95
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:设置过大,可能会导致无法及时发现异常。
ai_watchdog_oom_growth_confidence
参数说明:OOM检测算法置信度。
参数类型:浮点型
参数单位:无
取值范围:0.1 ~ 1
默认值:0.95
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
ai_watchdog_oom_malloc_failures
参数说明:容忍的最大连续内存分配失败数量,超过该数量可能会触发OOM探测功能。
参数类型:整型
参数单位:个
取值范围:1 ~ 32000
默认值:50
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:设置过小,会导致频繁报警;设置过大,会导致无法及时发现异常。
ai_watchdog_oom_other_used_memory_threshold
参数说明:预期的数据库的其他部分内存使用上限。
参数类型:整型
参数单位:MB
取值范围:-1 ~ 1048576
默认值:分为以下2种情况:
- 如果该参数是通过OM安装进行设置,其默认值为-1;
当参数值为-1时,对其他部分内存使用上限按照如下规则判断是否发生泄露:
- 若max_process_memory小于300GB,则其他部分内存使用上限为20GB;
- 若max_process_memory大于等于300GB小于600GB,则其他部分内存使用上限为40GB;
- 若max_process_memory大于等于600GB,则其他部分内存使用上限为60GB。
若用户未采用默认值-1,则其他部分内存使用上限将采用用户设置的参数。
- 如果该参数不通过OM安装进行设置,其默认值为20480。
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:设置过小,会导致频繁报警;设置过大,会导致无法及时发现异常。
ai_watchdog_oom_process_threshold
参数说明:预期的数据库进程使用占max_process_memory的使用比例,到达该阈值时,会触发内存泄漏判断。
参数类型:浮点型
参数单位:无
取值范围:0 ~ 10
默认值:分为以下2种情况:
- 如果该参数是通过OM安装进行设置,其默认值为1;
- 如果该参数不通过OM安装进行设置,其默认值为1.1。
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
ai_watchdog_oom_shared_threshold
参数说明:预期的数据库共享内存使用比例上限。
参数类型:浮点型
参数单位:无
取值范围:0 ~ 1
默认值:0.4
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
ai_watchdog_rto_restriction_time
参数说明:AI Watchdog自愈功能的RTO限制,超过该RTO阈值,则不进行自愈操作。
参数类型:整型
参数单位:秒(s)
取值范围:0 ~ 36000
默认值:600
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。取值不能带单位。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
ai_watchdog_tolerance_times
参数说明:AI Watchdog启动自愈前最多能容忍多少次连续异常事件,通过该参数可以避免错误操作。
参数类型:整型
参数单位:次
取值范围:0 ~ 100
默认值:4
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
ai_watchdog_tps_threshold
参数说明:数据库实例的预期TPS使用下限,低于该值,会触发异常判断逻辑。
参数类型:整型
参数单位:次
取值范围:0 ~ 32000
默认值:2
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
ai_watchdog_wait_time
参数说明:为了避免数据库频繁进行自愈操作,会在数据库启动后一段时间进行等待,该值即用来调整等待时间。
参数类型:整型
参数单位:秒(s)
取值范围:0 ~ 36000
默认值:1800
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。取值不能带单位。
设置建议:推荐使用默认值。
设置不当的风险与影响:设置过小,可能会导致数据库刚启动时误报;设置过大,可能会导致无法发现等待时间内的异常。
ai_watchdog_warning_retention
参数说明:AI Watchdog在dbe_perf.ai_watchdog_detection_warnings视图中保留的告警记录数上限。
参数类型:整型
参数单位:个
取值范围:0 ~ 32000
默认值:20
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。