`
丁林.tb
  • 浏览: 798060 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

A new parameter to control updating statistics strategy

阅读更多

       If a table contains several indexes and a select query does not have a “force index” hint clause, the MySQL optimizer take charge of determining which index to use. In some cases, we find that MySQL optimizer does not select the best index.

Here we discuss a strategy to deal with the problem, using a new parameter.

 

1、table and index statistics

The statistics contains the number of different key values in a given index, which affects the decision of index selection.

       In a big table, it is not workable that scans all the rows and counts the accurate statistics. So InnoDB pick up some example rows to estimate the result. The variable “innodb_stats_sample_pages “is used to define the number of example rows. Its default value is 8.

       There should be a balance consideration about this variable. Because the function “dict_update_statistics”, which is used to update a table’s statistics, is automatically called at various times. The bigger the innodb_stats_sample_pages is, the more accurate result comes, but it may lead to excessive I/O and CPU.

 

2、When the dict_update_statistics called?

There are some scenarios that dict_update_statistics will be called.

a)       Statements like “show status”

Such as “show index from table-name” and “show status like ‘’”.  There is a variable named “innodb_stats_on_metadata” to control whether run dict_update_statistics in such queries. Default value is ON.

b)       Table monitor

When a table named “innodb_table_monitor”(InnoDB table) is created, table monitor will be run every minute. “dict_update_statistics” is called here.

c)        Analyze table table-name

d)       Dynamically during insert/update operation.

This is why the innodb_stats_sample_pages cannot be set too big. There is a counter to record the times of modifying indexed column of this table from last dict_update_statistics. When the counter is up to 2000000000 or 1/16 of the table row number, dict_update_statistics is called.

 

3、Force re-calculate statistics using analyze table

Let’s look into the next steps:

Set innodb_stats_sample_pages = BIGNUM;

Analyze table table-name;

Set innodb_stats_sample_pages = 8;

 

Obviously this does not make sense, for the reason of d) in last section.

 

4、Strategy for certain requirement

But let’s think about this case, when there are lots of rows in a table, and the row number will keep relatively stable in a period.

We run the analyze table command, and test the queries that will run upon this table, check that the index selection working well.

Since the dynamically re-calculating may get wrong statistics and then leads to wrong index-selection, we plan to disable the mechanism, using a variable that can be update by command “set global”.

The variable can be named “innodb_stats_dynamically”, ON as default.

So when we think the data number is big enough and will be relatively stable in a period afterward, the sample commands can be as follow:

 

Set innodb_stats_dynamically = off;

Set innodb_stats_sample_pages = BIGNUM;

Analyze table table-name;

Set innodb_stats_sample_pages = 8; (optional)

 

        

  • 大小: 45 KB
1
0
分享到:
评论
1 楼 whitesock 2012-02-08  
以前线上也遇到过这样的问题,没有什么太好的办法。关掉innodb_stats_on_metadata,然后定期对比一下show index from的输出。

相关推荐

    modeling algorithm

    - Use a Number Slider parameter to control the extrusion depth dynamically. - Adjust the slider value to see the roof update in real-time. #### Tools Covered in Grasshopper Grasshopper includes a ...

    Bundle Adjustment —A Modern Synthesis

    problem of refining a visual reconstruction to produce jointly optimal structure and viewing parameter estimates. Topics covered include: the choice of cost function and robustness; numerical ...

    微软内部资料-SQL性能优化5

    In a nonclustered index, the leaf level contains each index key, plus a bookmark that tells SQL Server where to find the data row corresponding to the key in the index. A bookmark can take one of two ...

    Solaris 10 System Administration Essentials

    12.9 Migrating a Zone to a New System 334 12.10 Deleting a Zone 336 12.11 Listing the Zones on a System 336 12.12 Zones Usage Examples 337 12.12.1 Adding a Dedicated Device to a Non-Global Zone 337 ...

    Access Frontend Updating Strategy-开源

    在IT行业中,Access Frontend Updating Strategy是一个重要的主题,特别是在企业级应用开发中。Microsoft Access作为一个数据库管理系统,常常被用于构建前端应用程序,与后端数据库进行交互。然而,随着项目的不断...

    a project model for the FreeBSD Project.7z

    This project model is not meant to be a tool to justify creating impositions for developers, but as a tool to facilitate coordination. It is meant as a description of the project, with an overview of...

    Updating Form from Another Thread without Creating Delegates for Type of Update

    `Updating Form from Another Thread without Creating Delegates for Every Type of Update`这个主题探讨的是如何在不为每种类型的更新创建单独委托的情况下,从其他线程安全地更新UI。 通常,当你尝试在非UI线程...

    Learn.Git.in.a.Month.of.Lunches.1617

    Fortunately, to get started you just need to master a few essential techniques. Read on! Learn Git in a Month of Lunches introduces the discipline of source code control using Git. Helpful for both ...

    VclZip pro v3.10.1

    PLEASE TAKE A LOOK AT THE "WHAT's NEW IN THIS VERSION" LINK IN THE HELP FILE AS IT HAS CONVENIENT LINKS TO ALL OF THE NEW TOPICS. ==================== Version 3.10 Build 1 - Several bug fixes. - ...

    BURNINTEST--硬件检测工具

    - Note: We have seen a report of the Video Playback failing (crash) due to a faulty video codec, ffdshow.ax. If you are using this we suggest you try a different Video file and codec. Release ...

    PATCH - Updating System INDIE V2.3.0

    PATCH-更新系统是坚如磐石,专业,智能,清洁的解决方案,用于管理和分发游戏和应用程序的更新。 您的玩家最终可以毫无痛苦地更新您的游戏,而不必在新版本到来时再次下载整个游戏。这将为他们节省大量带宽和时间!...

    Myeclipse禁用updating indexes

    #### 三、How to Disable Updating Indexes in MyEclipse 步骤如下: 1. 打开MyEclipse,点击菜单栏上的`Window`选项。 2. 在下拉菜单中选择`Preferences`。 3. 在弹出的首选项对话框中,按照路径`MyEclipse ...

    linux kernel in a nutshell

    - **Modifying the Bootloader**: Updating the bootloader configuration file (`grub.conf` or `grub.cfg`) is necessary to add the new kernel as a boot option. #### Major Customizations In addition to ...

    google api php client

    1. If you have delegated domain-wide access to the service account and you want to impersonate a user account, specify the email address of the user account using the method setSubject: ```php $...

    CE中文版-启点CE过NP中文.exe

    Thanks go out to SER[G]ANT for updating the russion translation files already June 23 2018:Cheat Engine 6.8.1 Released: Apparently 6.8 contained a couple of annoying bugs, so here's an update that ...

    PATCH-Updating System.zip

    针对“PATCH-Updating System.zip”这个压缩包文件,我们可以推断它包含了一个与Unity引擎相关的版本更新或补丁包,主要服务于PC平台。下面将详细讨论Unity引擎的版本更新、补丁管理和Unitypackage文件格式。 Unity...

    idea的文件一直在不停闪烁,并不停updating and index.doc

    ### IntelliJ IDEA 文件持续闪烁与Updating and Indexing问题详解 #### 一、问题概述 在使用IntelliJ IDEA进行开发过程中,部分用户可能会遇到一个较为常见的现象:IDE中的文件图标会不断闪烁,同时状态栏提示...

    人脸识别、行人ReID图像分割

    we design a model updating strategy to adapt the appearance changes over time by discarding degraded trees of the BTM and DTM and initializing new trees as replacements. We test the proposed tracking ...

Global site tag (gtag.js) - Google Analytics