固定执行计划方案

最理想的优化器应该具备根据不同情况以动态方式制定出最优化执行计划的能力。可是就像世上万事都有其利弊两面一样,对于任何变化而言有时会朝着好的方向变化,但有时也会朝着坏的方向变化。如果我们通过努力获得的最优执行计划由于优化器的不完善而向坏的方向变化,那么我们岂不是会觉得非常冤枉?

在我们极力采取措施来试图引导执行计划却无济于事的时候,问题就会变得比较复杂。如果我们能够从逻辑上知道最优的执行计划,那么就可以试图对优化器的不足进行控制。但是我们有时候也会发现优化器非常 “固执”,固执得让人几乎无法忍受。

虽然可以通过使用各种提示等强制性的手段来强迫引导优化器制定出最优化的执行计划,但是如果最优化的执行计划会随着统计信息的变化而随时变化,那真的会让人觉得非常无奈。就像汽车不仅有油门而且也有刹车一样,我们必须具备可以控制优化器判断最优化执行路径的设备。

优化器为了实现该目标,将以前搜集到的执行计划的概要内容进行存储,当需要时将其取出并作为制定新执行计划的参考信息,该功能被称为“存储纲要(Stored Outline)”。

在这里有必要对参考概要内容的意思进行反复思考,这就和工厂制造产品或者做饭时所遵循的简单步骤类似。即使对于门外汉而言,在做饭时只要按照速食食品说明上所介绍的步骤进行操作就可以非常简单地把饭菜做好,有时说不定做出的饭菜还会得到别人的称赞呢!

就像如果提前准备了制作方法,那么很容易就可以制造出优质的产品一样,如果提前准备了执行计划的概要内容,那么任何时候都可以获得最优的执行计划。使用该功能不仅能够以相同的方式再现以前的执行计划,而且也能够达到控制优化器的目的。

例如,在制定经济政策时如果制定了过分需要调控的经济政策,就容易破坏市场的弹性从而导致经济疲软,因此可以判定所制定的政策并不适应于市场环境。同样的道理,在固定非确定性执行计划时尽量不要破坏优化器的弹性,这一点非常重要,但是在现实中没能遵守此原则的现象也经常出现,所以希望各位读者提高警惕。

在这里介绍了一些有关经济学的理论,对于没有遵循这些经济规律而无法进入到经济大国队列的国家来说难道这不是无可争辩的事实吗?越是经济落后的国家如果给市场的弹性太大就越会造成难以想象的威胁,所以为了防止发生混乱,他们往往将自己定位在一般水平上并拒绝进一步的变化。

同理,对执行计划的理解能力越低就越担心出现严重问题,所以就容易导致对现有的一般水平比较满意的固步自封心理,他们担心为了实现进一步的优化而使自己陷入困难的漩涡,结果就只能使得这些人无视有效方法的使用而满足于现有水平。

在这里作者一直所强调的重点就在于应用OUTLINE功能来达到优化的目的,在这里之所以反复强调,是因为作者比较担心以后会发生类似的问题。

最理想的方法是,以调整好的优化器因子和高质量的SQL语句为基础,在大部分情况下将所有任务都交付于优化器来完成,只有在特殊的情况下才通过OUTLINE的方式对其进行干预,我们可以将此方法称为最理想的战略优化方式。

我们可以使用OUTLINE功能对一个或者多个特定的SQL进行管理,前面所介绍的执行计划概要内容并不是指OUTLINE将执行计划的所有内容进行了存储,而是指为了帮助优化器重现相同的执行计划而提供的少量的辅助信息。当然OUTLINE也可以被认为是一种提示,但是它却与我们所使用的一般提示有所不同。

对于OUTLINE既可以采用共享的方式进行管理,也可以采用私有的方式进行管理;根据不同的情况既可以允许(Enable)使用它,也可以禁止(Disable)使用它;根据需要也可以对其进行强制性的编辑,就像表一样既可以将其导出,也可以将其导入。

为了便于使用可以为其指定特定的组进行管理,这里我们将为其指定的组称之为类(Category),按类进行管理使得OUTLINE的应用变得简便而灵活。

在进行分类时应该把具有共同特性的成员分为一类。例如,如果存在业务性质完全不同的子系统时,应该将这些子系统分为不同的类进行单独管理;或者为了在白天和晚上按照不同的执行计划进行执行,可以将白天的执行计划分为一类,晚上的执行计划分为另外一类。

在执行速度上存在问题而要求提高速度的情况下,可以将影响速度的要素集中到一起为其指定一个类并对其进行单独处理。在特定的子系统中对于很多部分需要进行改善操作时,同样可以将需要改善的部分进行单独管理。对于海量表必须频繁更新其统计信息方可确保较快的执行速度的情况与这里所介绍的情况比较类似。在固定比较好的执行计划时也同样需要包括具有相同性质的提示类。

我们可以采用的具体措施请参考《海量数据库解决方案》中的内容。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25708791/viewspace-695189/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25708791/viewspace-695189/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
任务计划程序可以用来定期执行Python脚本。在Linux系统上,可以使用crond结合命令行实现。另外一种方式是直接使用Python。常见的Python定时任务的实现方式有以下几种: 1. 使用第三方库schedule:该库可以让你以一种简单的方式在指定时间间隔内执行任务。你可以使用schedule库的every()方法来设置任务的执行频率,然后使用do()方法指定要执行的任务函数。最后,使用run_pending()方法来运行任务。可以通过调用cancel_job()方法来取消任务。 2. 使用第三方库APScheduler:APScheduler是一个功能强大的Python定时任务库,支持多种方式的定时任务配置,如固定时间间隔、指定时间点、定时循环等。通过定义一个定时任务函数,然后使用APScheduler的add_job()方法来添加任务,最后使用start()方法来启动任务。 3. 使用Python内置的模块time和threading:你可以使用time模块的sleep()方法来设置任务的执行间隔,然后使用threading模块创建一个线程来执行任务函数。通过循环调用任务函数并在每次执行后暂停一段时间来实现定时任务。 总结来说,任务计划程序可以通过使用Python的第三方库(如schedule和APScheduler)或者使用Python的内置模块(如time和threading)来执行Python脚本。具体选择哪种方式取决于你的需求和偏好。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Python 实现定时任务的八种方案!](https://blog.csdn.net/chinesehuazhou2/article/details/120147964)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值