ITPUB论坛-中国最专业的IT技术社区

 
 注册
热搜:
楼主: richto

邀请高手测试一款机械式全自动SQL优化工具

[复制链接]
论坛徽章:
20
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:58马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:58
21#
 楼主| 发表于 2018-1-6 11:40 | 只看该作者
Newkid, thanks for you subjection, it is one of enhancement will implemented in Version 2.  Thanks!
How is your testing ?

使用道具 举报

回复
论坛徽章:
487
秀才
日期:2015-09-09 10:33:01秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12状元
日期:2015-11-23 10:04:09举人
日期:2015-11-23 10:04:09秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21
22#
发表于 2018-1-7 09:27 | 只看该作者
我现在只是有空玩玩,并没有真正用我们生产的SQL来测。因为那些需要调优的都是大家伙,这个过程太花时间。我希望有一天能用它来解决实际问题。对我来说现在这个工具的最大好处是学习各种HINTS的作用,可以很直观地看到HINTS对计划的影响。
你有个选项叫做executing method, 有static and dynamic, 分别是什么意思?
你在执行sql之前,好像会把那些重复的plan去掉,只针对不同的PLAN测试执行?如果是这样,怎么解决EXPLAIN PLAN不精确的问题呢?可能有些好机会就这样被错过了。

使用道具 举报

回复
论坛徽章:
20
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:58马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:58
23#
 楼主| 发表于 2018-1-7 10:15 | 只看该作者
I have heard a lot of people ask  "Why my SQL performance is vary depending on where the SQL is executed ?", sometimes you may notice that the same SQL is performing good in one place, but not good in another place. If your SQL has bind variables, there may be a problem that you are not aware; it is the bind sensitive optimization feature of your SQL statement may be disabled in a static SQL cursor like the following:

Static SQL cursor
-------------------------------
declare
  V1   NUMBER(6);
  C_NAME  VARCHAR2(60);
  CURSOR C1 is select emp_name from employee where emp_id < V1;
begin
  V1:=120000;
  OPEN C1;
  FETCH C1 INTO C_NAME;
  CLOSE C1;
end;

As the cursor is hardcoded in the declare section, the bind sensitive feature for the SQL will be disabled, the cursor's query plan will be fixed when the SQL is first executed in a day.
If you code the SQL as a dynamic SQL/cursor like the following, the bind sensitive optimization feature will be used if your SQL is bind sensitive.

Dynamic SQL cursor
------------------------------------
declare
  V1   NUMBER(6);
  C_NAME  VARCHAR2(60);
  LONGSQL CLOB;
  C1 SYS_REFCURSOR;
begin
V1:=120000;
  LONGSQL := 'select emp_name from employee where emp_id < :var';
  OPEN C1 FOR LONGSQL USING  V1  ;
  FETCH C1 INTO C_NAME;
  CLOSE C1;
end;

For the dynamic SQL cursor, the query plan of the SQL statement may be changed upon the bind-in value of V1, the performance of the SQL statement can be changed significantly(most likely become better if the SQL syntax is simple). So, you may find that a bind sensitive SQL may also be place sensitive SQL !

使用道具 举报

回复
论坛徽章:
487
秀才
日期:2015-09-09 10:33:01秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12状元
日期:2015-11-23 10:04:09举人
日期:2015-11-23 10:04:09秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21
24#
发表于 2018-1-7 22:57 | 只看该作者
原来动态静态讲的是这个意思。PLSQL 的session cursor cache实现了softer soft parse, 但是就无法利用adaptive cursor sharing的好处。动态SQL不能缓存,却因此能够产生更灵活的计划,这也算是一个比较偏门的技巧,我还是第一次见到被用于此目的。
但是你的一个tuning task就只用一组绑定变量值,好像不涉及到adaptive cursor sharing吧?这两种选择怎么会有区别呢?
你还没有回答我另外一个疑问,就是你在测试执行SQL的时候,怎么才能保证不会遗漏,因为explain plan相同的SQL, actual plan未必相同,而你的工具似乎会错过一些actual plan的产生。

使用道具 举报

回复
论坛徽章:
20
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:58马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:58
25#
 楼主| 发表于 2018-1-8 12:51 | 只看该作者
本帖最后由 richto 于 2018-1-8 12:55 编辑


原来动态静态讲的是这个意思。PLSQL 的sessioncursor cache实现了softer soft parse, 但是就无法利用adaptivecursor sharing的好处。动态SQL不能缓存,却因此能够产生更灵活的计划,这也算是一个比较偏门的技巧,我还是第一次见到被用于此目的。

As a SQL developer may not know the SQL performance may be varying on where and how to execute it. This is a good remainder to SQL developer.


但是你的一个tuning task就只用一组绑定变量值,好像不涉及到adaptive cursor sharing吧?这两种选择怎么会有区别呢?

It is the first version that we don’t have the multiple bind values execution method yet. If user has executed the SQL before and it is still in SGA, the effect will be reflected on the explain plan and execution time.


你还没有回答我另外一个疑问,就是你在测试执行SQL的时候,怎么才能保证不会遗漏,因为explain plan相同的SQL,actual plan未必相同,而你的工具似乎会错过一些actual plan的产生.

You are very good, not many people know this problem, and it is actually the weakness of Explain plan function. Oracle cannot tell the actual plan before the SQL is executed and we cannot do it too. We cannot test run all SQL(there is up to 6000 SQL will be tested in intelligent 5), since it will take too long time to finish to test. But I can assure you that the missing actual plan will be picked up by the other unique Estimated Plan SQL. Since the number of actual plans is limited. Other unique Estimated Plan will finally generate the same actual plan if you increase the intelligent level to higher degree.

使用道具 举报

回复
论坛徽章:
487
秀才
日期:2015-09-09 10:33:01秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12状元
日期:2015-11-23 10:04:09举人
日期:2015-11-23 10:04:09秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21
26#
发表于 2018-1-9 01:06 | 只看该作者
关于这个静态/动态的区别,确实是一个不错的技巧,在GUI上面如果能稍微解释一下就更好了。但我还是认为和这个调优工具的关系不大。你说用户在调优之前可能已经执行过了,导致共享池里有好几个版本,这是没错的。但是你的工具不管怎么执行也只用到其中的一种,也就是说不管用户选择静态或者动态,最终会得到同一个计划。
这说的还是Original SQL. 由你的工具产生的其他Alternative SQL就更不用说了,用户不可能会事先执行过。
此外你说的错过的计划会被其他变种所覆盖,这个说法是可以接受的。

使用道具 举报

回复
认证徽章
论坛徽章:
8
2009新春纪念徽章
日期:2009-01-04 14:52:28祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-03-01 11:07:24ITPUB9周年纪念徽章
日期:2010-10-08 09:32:25ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262013年新春福章
日期:2013-02-25 14:51:24沸羊羊
日期:2015-03-04 14:51:522015年新春福章
日期:2015-03-06 11:57:31
27#
发表于 2018-1-9 13:49 | 只看该作者
richto 发表于 2017-12-25 11:27
"TOM的观点是反对使用HINTS的,它是调优的最后选择,不是常规手段"
If you are talking about 10 years ag ...

在众多SQL调优方法中,hints应该排在最后,即使在生产库上。如果仅就两位列出的三个方法来讲,应用顺序应该这样比较合理:index-->rewrite-->hints。

使用道具 举报

回复
认证徽章
论坛徽章:
8
2009新春纪念徽章
日期:2009-01-04 14:52:28祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-03-01 11:07:24ITPUB9周年纪念徽章
日期:2010-10-08 09:32:25ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262013年新春福章
日期:2013-02-25 14:51:24沸羊羊
日期:2015-03-04 14:51:522015年新春福章
日期:2015-03-06 11:57:31
28#
发表于 2018-1-9 13:51 | 只看该作者
richto 发表于 2018-1-8 12:51
原来动态静态讲的是这个意思。PLSQL 的sessioncursor cache实现了softer soft parse, 但是就无法利用adap ...

“PLSQL 的sessioncursor cache实现了softer soft parse, 但是就无法利用adaptivecursor sharing的好处。”
确认?依据呢?

使用道具 举报

回复
论坛徽章:
487
秀才
日期:2015-09-09 10:33:01秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12状元
日期:2015-11-23 10:04:09举人
日期:2015-11-23 10:04:09秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21
29#
发表于 2018-1-9 22:28 | 只看该作者
sqysl 发表于 2018-1-9 13:51
“PLSQL 的sessioncursor cache实现了softer soft parse, 但是就无法利用adaptivecursor sharing的好处。 ...

这其实是可以从原理推测出来的。adaptive cursor sharing发生于软解析,而session cursor cache连软解析都消除了,只是反复的bind/execute/fetch, 游标一直没有关闭。

如果要权威说法我找到这个:


Hi Tom,

1.Does Adaptive cursor (ACS) sharing work for all SQLS from PL/SQL?
...........

1) not currently, plsql cursor caching can get in the way from time to time. That is a work in progress.
.............





Many thanks Tom for your time and help for clarifying the above doubts .

ACS does not work for the SQL from PL/SQL ..
Is it becuase of pl/sql cursor cache ? ACS kicks in when it sees a 'parse' call but becuase of pl/sql cursor cache , there will be only one parse call and many execution so NO ACS happens .. Am I correct ?

yes, correct.


时间过去好几年了,不知道现在的PL/SQL有没有改进,有空可以做个试验看看。

使用道具 举报

回复
论坛徽章:
487
秀才
日期:2015-09-09 10:33:01秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12状元
日期:2015-11-23 10:04:09举人
日期:2015-11-23 10:04:09秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21
30#
发表于 2018-1-9 22:44 | 只看该作者
来自MOS的官方说法:




























  







Click to add to Favorites



  Customer RecommendedAdaptive Cursor Sharing: Overview (Doc ID 740052.1) To BottomTo Bottom  












In this Document


Purpose

Scope

Details

  Introduction

  Advantages and Disadvantages of Adaptive Cursor Sharing

  Advantages of Adaptive Cursor Sharing

  Disadvantages of Adaptive Cursor Sharing

  Adaptive Cursor Sharing (Bind Sensitivity)

  Extended Cursor Sharing (Bind Aware)

  Monitoring

  Known Issues with Excessive Child Cursors


  Known Issues

References




Applies to:
Oracle Database - Enterprise Edition - Version 11.1.0.6 and later
Information in this document applies to any platform.

Purpose

The purpose of this document is to provide an overview to the Adaptive Cursor Sharing (ACS) feature that was introduced in 11g

Scope

The document contains a basic overview and background as well as issues that customers should be aware of.

Details

Introduction

With the introduction of the Cost Based Optimizer (CBO) a number of changes were made to calculate the selectivity of a predicate, which in turn affected how the query was optimized.  The selectivity was based on the number of distinct values for a given column or a predefined percentage of rows depending on the relational operator that was used. For more details on predicate selectivity see:

Document 68992.1  Predicate Selectivity

This worked well for data that was evenly distributed but had limitations in applications where data was skewed.

With 9i, a new feature "Bind Peeking" was introduced to try to get around the issues associated with the selectivity of a bind variable. During hard parsing of a query using bind variables, the binds are "peeked at" and selectivity is generated based on the bind and the underlying column statistics. This method is successful but if the bind selectivity of the initial execution of a statement varied from the selectivity of subsequent executions with different sets of binds this could sometimes lead to plans being generated that were not representative of the general query usage and which performed poorly.

In Oracle 10g, this was especially noticeable since the default statistic gathering methodology changed to gather histograms automatically. This meant that selectivity previously generated based on the number of distinct values was now generated based on histograms. This gave the optimizer better information about the distribution of skewed data, the impact of which being that the first execution of a query using binds that were representative of the general query usage was particularly important. For more information on this see:

Document 387394.1  Query using Bind Variables is suddenly slow
Document 430208.1  Bind Peeking By Example

In Oracle 11g, Adaptive Cursor Sharing was introduced to provide a solution to these issues. Adaptive Cursor Sharing monitors the execution statistics for candidates queries and makes it possible for the same query to generate and use different execution plans for different set of binds values. See:

Oracle® Database Performance Tuning Guide
11g Release 2 (11.2)
Part Number E16638-07
11.1.3.1 Adaptive Cursor Sharing








Advantages and Disadvantages of Adaptive Cursor Sharing

Advantages of Adaptive Cursor Sharing

Adaptive cursor sharing is a solution to provide the shareability of binds, with the plan adaptability of literals.
With adaptive cursor sharing the database can adapt execution plans based on the selectivity of values used in bind variables. This resolves the situation where the plan used for one set of bind variables is inappropriate for another set.

Previously, workarounds employed would either use literal values instead of binds, which could lead to excessive hard parsing, or apply a fixed plan that could cause performance issues.

Disadvantages of Adaptive Cursor Sharing

There may be some extra overhead associated with Adaptive Cursor Sharing:
•More Hard Parses (CPU) - Extra Hard Parses will be required when a cursor becomes "Bind Aware" as we attempt to generate the better matched execution plans for the bind selectivity.
•More Child Cursors (SGA) - It is recommended that some consideration be taken to increase the size of the shared_pool on upgrade from 10g to 11g, given the extra cursors that may be required to accommodate this feature.
•More Work to Match the Cursor (CPU) - More Child Cursors and the requirement to match a query to the best execution plan for its predicate selectivity.
•If you encounter an issue with query performance, in some cases ACS may make the issue more difficult to identify and repeat if a new plan is generated and accepted that then makes the problem "disappear". The other side to this is that the query now performs better without user intervention.

A SQL statement is executed with a less-than-optimal access method, thus taking what may be significantly higher elapsed time, before it is determined to be a candidate for Adaptive Cursor Sharing.   For example, it may perform a full table scan when an index access would have improved performance, or vice-versa.  In other words it is the additional workload observed within this less-than-optimal execution plan, which then causes ACS to take effect.

Adaptive Cursor Sharing (Bind Sensitivity)

The first step towards ACS is recognising a query as "Bind Sensitive". This means that the best plan for a query has potential to be different according to the bind variables supplied to it. In effect this just means the cursor is being monitored to see if it should be made bind aware.

A cursor is marked as Bind Sensitive if:

•query is executed with bind peeking


•binds using any of the following relational operators = < > <= >= != or a user defined bind operator e.g. contains(e.job,:job,1)>0,
From 11.2.0.2 the "LIKE" operator is also supported.



•A histogram exists on the column containing the bind value.


In other words, a cursor is marked Bind Sensitive if a change in the bind variable value may lead to a different plan.

Apart from checking for a valid operator there are also a number of subsequent bind sensitivity checks that need to be performed before it can be marked as bind sensitive. If any of these checks fail, the cursor will not be marked as bind sensitive and adaptive cursor sharing will not occur and Adaptive Cursor Sharing will be disabled :-
•Extended cursor sharing has been disabled
•The query has no binds
•Parallel query is used

•Certain parameters like ("_optim_peek_user_binds"=false) are set
•You are using a /*+ NO_BIND_AWARE */ hint
•Outlines are being used
•Query is recursive
•The number of binds in a given sql statement is greater than 14.  ** Could be less depending on version and setting of fix_control for Bug 10182051.  See Document : 1983132.1

SQL Plan Baselines are designed to work with Adaptive Cursor Sharing.  Any valid enabled SQL Plan Baselines Plans can be used by Adaptive Cursor Sharing.  This means if you have more than one enabled baseline for a given SQL statement ACS can use one or more of those baselines at the same time.

How do adaptive cursor sharing and SQL Plan Management interact?



When all the criteria are met the cursor is marked as bind sensitive and a "sharing context" containing information about execution statistics of the cursor is created and stored against the cursor.

Cursors that are marked as bind-sensitive can been identified by the column IS_BIND_SENSITIVE having a value "Y" in V$SQL or V$SQLAREA.



Extended Cursor Sharing (Bind Aware)

If there is significant variation in the row source cardinality for executions of the same sql statement in consecutive executions a cursor will be marked as bind aware.  This will allow multiple child cursors to be created for different bind selectivity values, while still attempting to share child cursors when possible.


For more information about this please see :-

Document 836256.1 Adaptive Cursor Sharing: Worked Example
Document 1115994.1 Introduction to Adaptive Cursor Sharing Concepts and Multimedia Demo [Video]





Monitoring

V$SQL can be used to see whether  a cursor is_bind_sensitive, is_bind_aware, or is_shareable.
Bind context information can be viewed via V$SQL_CS_SELECTIVITY, V$SQL_CS_STATISTICS and V$SQL_CS_HISTOGRAM

V$SQL_CS_SELECTIVITY displays  the valid selectivity ranges for a child cursor in extended cursor sharing mode.
A valid range consists of a low and high value for each predicate containing binds. Each predicate's selectivity (with the current bind value) must fall between the corresponding low and high values in order for the child cursor to be shared.

V$SQL_CS_STATISTICS contains the raw execution statistics used by the monitoring component of adaptive cursor sharing.
A sample of the executions is monitored. This view shows which executions were sampled, and what the statistics were for those executions. The statistics are cumulative for each distinct set of bind values.

V$SQL_CS_HISTOGRAM summarizes the monitoring information stored by adaptive cursor sharing.
This information is used to decide whether to enable extended cursor sharing for a query. It  is stored in a histogram, whose bucket's contents are exposed by this view.



Known Issues with Excessive Child Cursors


There is a possibility that Adaptive Cursor Sharing may compound problems in which excessive numbers of child cursors are generated.  This may lead to performance degradation as large numbers of child cursor can put space pressure on the shared pool and may also lead to an increase in mutex X waits for that cursor.

Checklist to avoid known issues
1. Ensure that cursor_sharing is not set to SIMILAR. In 11g  this setting is not recommended and is deprecated in future releases.

Document 1169017.1:ANNOUNCEMENT: Deprecating the cursor_sharing = 'SIMILAR' setting

2. If there are high version counts check v$sql_shared_cursor and search My Oracle Support for notes that may allude to the cause of the excessive cursors.

Document 438755.1 : Formated V$SQL_SHARED_CURSOR Report by SQLID or Hash Value

If there are still excessive child cursors, then Oracle Support should be contacted to assist with diagnosing the issue.

3.  Bug 10182051 has a query with many predicates containing binds has many shareable child cursors (is_shareable = 'Y' in V$SQL) with the same plan hash value, but some with other plan hash values:

Document 10182051.8 EXTENDED CURSOR SHARING GENERATES 100S OF SHAREABLE CHILD CURSORS FOR A QUERY


Known Issues

1. Bug 8357294 is where adaptive cursor sharing will not work from PL/SQL.  This is currently being worked on:

Bug 8357294 ADAPTIVE CURSOR SHARING DOESN'T WORK FOR STATIC SQL CURSORS FROM PL/SQL

目前尚未有解决办法。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 |
  | | |
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
 北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表
  • http://www.qqtmb.com/5580/64417.html
  • http://www.qqtmb.com/5580/2673.html
  • http://www.qqtmb.com/5580/345276.html
  • http://www.qqtmb.com/5580/56772.html
  • http://www.qqtmb.com/5580/3625.html
  • http://www.qqtmb.com/5580/234573.html
  • http://www.qqtmb.com/5580/37256.html
  • http://www.qqtmb.com/5580/554273.html
  • http://www.qqtmb.com/5580/454773.html
  • http://www.qqtmb.com/5580/244767.html
  • http://www.qqtmb.com/KU110/36326.html
  • http://www.qqtmb.com/KU110/17143.html
  • http://www.qqtmb.com/KU110/445171.html
  • http://www.qqtmb.com/KU110/3172.html
  • http://www.qqtmb.com/KU110/374615.html
  • http://www.qqtmb.com/KU10/2361.html
  • http://www.qqtmb.com/KU10/357743.html
  • http://www.qqtmb.com/KU10/555252.html
  • http://www.qqtmb.com/KU10/71211.html
  • http://www.qqtmb.com/KU10/437244.html
  • http://www.qqtmb.com/dG10/735.html
  • http://www.qqtmb.com/dG10/547654.html
  • http://www.qqtmb.com/dG10/563165.html
  • http://www.qqtmb.com/dG10/56636.html
  • http://www.qqtmb.com/dG10/734677.html
  • http://www.qqtmb.com/G20/51572.html
  • http://www.qqtmb.com/G20/4135.html
  • http://www.qqtmb.com/G20/45212.html
  • http://www.qqtmb.com/G20/62632.html
  • http://www.qqtmb.com/G20/22636.html
  • http://www.qqtmb.com/G21/556576.html
  • http://www.qqtmb.com/G21/7136.html
  • http://www.qqtmb.com/G21/44261.html
  • http://www.qqtmb.com/G21/26261.html
  • http://www.qqtmb.com/G21/665735.html
  • http://www.qqtmb.com/GH22/72632.html
  • http://www.qqtmb.com/GH22/317221.html
  • http://www.qqtmb.com/GH22/7733.html
  • http://www.qqtmb.com/GH22/613157.html
  • http://www.qqtmb.com/GH22/3647.html
  • http://www.qqtmb.com/GH32/521664.html
  • http://www.qqtmb.com/GH32/44157.html
  • http://www.qqtmb.com/GH32/23611.html
  • http://www.qqtmb.com/GH32/26577.html
  • http://www.qqtmb.com/GH32/562.html
  • http://www.qqtmb.com/GH32/47225.html
  • http://www.qqtmb.com/GH32/125556.html
  • http://www.qqtmb.com/GH32/31475.html
  • http://www.qqtmb.com/GH32/527544.html
  • http://www.qqtmb.com/GH32/53712.html
  • http://www.qqtmb.com/fH32/55436.html
  • http://www.qqtmb.com/fH32/575457.html
  • http://www.qqtmb.com/fH32/2355.html
  • http://www.qqtmb.com/fH32/5237.html
  • http://www.qqtmb.com/fH32/747422.html
  • http://www.qqtmb.com/fH32/37654.html
  • http://www.qqtmb.com/fH32/465525.html
  • http://www.qqtmb.com/fH32/732255.html
  • http://www.qqtmb.com/fH32/21566.html
  • http://www.qqtmb.com/fH32/11312.html
  • http://www.qqtmb.com/fH32/6353.html
  • http://www.qqtmb.com/fH32/74173.html
  • http://www.qqtmb.com/PL200/67341.html
  • http://www.qqtmb.com/PL200/145454.html
  • http://www.qqtmb.com/PL200/474715.html
  • http://www.qqtmb.com/PL200/6316.html
  • http://www.qqtmb.com/PL200/24351.html
  • http://www.qqtmb.com/PL200/1352.html
  • http://www.qqtmb.com/PL200/67341.html
  • http://www.qqtmb.com/PL200/145454.html
  • http://www.qqtmb.com/PL200/474715.html
  • http://www.qqtmb.com/PL200/6316.html
  • http://www.qqtmb.com/PL200/24351.html
  • http://www.qqtmb.com/PL200/1352.html
  • http://www.qqtmb.com/PLeff/273367.html
  • http://www.qqtmb.com/PLeff/57316.html
  • http://www.qqtmb.com/PLeff/6325.html
  • http://www.qqtmb.com/PLeff/41626.html
  • http://www.qqtmb.com/PLeff/514325.html
  • http://www.qqtmb.com/PLeff/34513.html
  • http://www.qqtmb.com/m1905/227.html
  • http://www.qqtmb.com/m1905/64265.html
  • http://www.qqtmb.com/m1905/63541.html
  • http://www.qqtmb.com/m1905/116717.html
  • http://www.qqtmb.com/m1905/31334.html
  • http://www.qqtmb.com/m1905/77477.html
  • http://www.qqtmb.com/m1905/62236.html
  • http://www.qqtmb.com/m1905/33524.html
  • http://www.qqtmb.com/m1905/47223.html
  • http://www.qqtmb.com/m1905/512757.html
  • http://www.qqtmb.com/m1905/633625.html
  • http://www.qqtmb.com/m1905/547652.html
  • http://www.qqtmb.com/m1905/273417.html
  • http://www.qqtmb.com/m1905/45424.html
  • http://www.qqtmb.com/m1905/7643.html
  • http://www.qqtmb.com/m1905/74135.html
  • http://www.qqtmb.com/m1905/262453.html
  • http://www.qqtmb.com/m1905/325626.html
  • http://www.qqtmb.com/m1905/141547.html
  • http://www.qqtmb.com/m1905/256133.html
  • http://www.qqtmb.com/m1905/36712.html
  • http://www.qqtmb.com/m1905/471163.html
  • http://www.qqtmb.com/m1905/252526.html
  • http://www.qqtmb.com/m1905/145111.html
  • http://www.qqtmb.com/m1905/115777.html
  • http://www.qqtmb.com/m1905/32651.html
  • http://www.qqtmb.com/m1905/555473.html
  • http://www.qqtmb.com/m1905/14461.html
  • http://www.qqtmb.com/m1905/552.html
  • http://www.qqtmb.com/m1905/761253.html
  • http://www.qqtmb.com/mm105/65336.html
  • http://www.qqtmb.com/mm105/466135.html
  • http://www.qqtmb.com/mm105/424351.html
  • http://www.qqtmb.com/mm105/147235.html
  • http://www.qqtmb.com/mm105/467436.html
  • http://www.qqtmb.com/mm105/164153.html
  • http://www.qqtmb.com/mm105/472151.html
  • http://www.qqtmb.com/mm105/11444.html
  • http://www.qqtmb.com/mm105/424625.html
  • http://www.qqtmb.com/mm105/253632.html
  • http://www.qqtmb.com/mm105/662713.html
  • http://www.qqtmb.com/mm105/217247.html
  • http://www.qqtmb.com/mm105/737532.html
  • http://www.qqtmb.com/mm105/1625.html
  • http://www.qqtmb.com/mm105/2545.html
  • http://www.qqtmb.com/mm105/2671.html
  • http://www.qqtmb.com/mm105/1411.html
  • http://www.qqtmb.com/mm105/114763.html
  • http://www.qqtmb.com/mm105/331212.html
  • http://www.qqtmb.com/mm105/557771.html
  • http://www.qqtmb.com/jb123/76236.html
  • http://www.qqtmb.com/jb123/357762.html
  • http://www.qqtmb.com/jb123/466572.html
  • http://www.qqtmb.com/jb123/733627.html
  • http://www.qqtmb.com/jb123/1263.html
  • http://www.qqtmb.com/jb123/135567.html
  • http://www.qqtmb.com/jb123/32355.html
  • http://www.qqtmb.com/jb123/746252.html
  • http://www.qqtmb.com/jb123/72661.html
  • http://www.qqtmb.com/jb123/216724.html
  • http://www.qqtmb.com/jb123/511452.html
  • http://www.qqtmb.com/jb123/1576.html
  • http://www.qqtmb.com/jb123/54314.html
  • http://www.qqtmb.com/jb123/143657.html
  • http://www.qqtmb.com/jb123/677414.html
  • http://www.qqtmb.com/jb123/2727.html
  • http://www.qqtmb.com/jb123/4471.html
  • http://www.qqtmb.com/jb123/43142.html
  • http://www.qqtmb.com/jb123/16.html
  • http://www.qqtmb.com/jb123/521.html
  • http://www.qqtmb.com/qqzy/15563.html
  • http://www.qqtmb.com/qqzy/535641.html
  • http://www.qqtmb.com/qqzy/131425.html
  • http://www.qqtmb.com/qqzy/242633.html
  • http://www.qqtmb.com/qqzy/135214.html
  • http://www.qqtmb.com/qqzy/41513.html
  • http://www.qqtmb.com/qqzy/625536.html
  • http://www.qqtmb.com/qqzy/577442.html
  • http://www.qqtmb.com/qqzy/36615.html
  • http://www.qqtmb.com/qqzy/26563.html
  • http://www.qqtmb.com/qqzy/15563.html
  • http://www.qqtmb.com/qqzy/535641.html
  • http://www.qqtmb.com/qqzy/131425.html
  • http://www.qqtmb.com/qqzy/242633.html
  • http://www.qqtmb.com/qqzy/135214.html
  • http://www.qqtmb.com/qqzy/41513.html
  • http://www.qqtmb.com/qqzy/625536.html
  • http://www.qqtmb.com/qqzy/577442.html
  • http://www.qqtmb.com/qqzy/36615.html
  • http://www.qqtmb.com/qqzy/26563.html
  • http://www.qqtmb.com/qq123/162652.html
  • http://www.qqtmb.com/qq123/272142.html
  • http://www.qqtmb.com/qq123/71157.html
  • http://www.qqtmb.com/qq123/176637.html
  • http://www.qqtmb.com/qq123/214247.html
  • http://www.qqtmb.com/qq123/67372.html
  • http://www.qqtmb.com/qq123/7375.html
  • http://www.qqtmb.com/qq123/375.html
  • http://www.qqtmb.com/qq123/734514.html
  • http://www.qqtmb.com/qq123/77312.html
  • http://www.qqtmb.com/qq123/226661.html
  • http://www.qqtmb.com/qq123/475214.html
  • http://www.qqtmb.com/qq123/16664.html
  • http://www.qqtmb.com/qq123/127162.html
  • http://www.qqtmb.com/qq123/234763.html
  • http://www.qqtmb.com/qq123/172342.html
  • http://www.qqtmb.com/qq123/71652.html
  • http://www.qqtmb.com/qq123/436.html
  • http://www.qqtmb.com/qq123/335662.html
  • http://www.qqtmb.com/qq123/436216.html
  • http://www.qqtmb.com/qq123/755247.html
  • http://www.qqtmb.com/qq123/53116.html
  • http://www.qqtmb.com/qq123/77513.html
  • http://www.qqtmb.com/qq123/137.html
  • http://www.qqtmb.com/qq123/433673.html
  • http://www.qqtmb.com/qq123/316552.html
  • http://www.qqtmb.com/qq123/43633.html
  • http://www.qqtmb.com/qq123/346336.html
  • http://www.qqtmb.com/qq123/661211.html
  • http://www.qqtmb.com/qq123/724526.html
  • http://www.qqtmb.com/qq123/316617.html
  • http://www.qqtmb.com/qq123/6475.html
  • http://www.qqtmb.com/qq123/243217.html
  • http://www.qqtmb.com/qq123/4255.html
  • http://www.qqtmb.com/qq123/175355.html
  • http://www.qqtmb.com/qq123/436735.html
  • http://www.qqtmb.com/qq123/725367.html
  • http://www.qqtmb.com/qq123/54155.html
  • http://www.qqtmb.com/qq123/622227.html
  • http://www.qqtmb.com/qq123/3714.html
  • http://www.qqtmb.com/qq123/547364.html
  • http://www.qqtmb.com/qq123/155245.html
  • http://www.qqtmb.com/qq123/75232.html
  • http://www.qqtmb.com/qq123/74621.html
  • http://www.qqtmb.com/qq123/742631.html
  • http://www.qqtmb.com/qq123/6513.html
  • http://www.qqtmb.com/qq123/11762.html
  • http://www.qqtmb.com/qq123/534217.html
  • http://www.qqtmb.com/qq123/355753.html
  • http://www.qqtmb.com/qq123/215532.html
  • http://www.qqtmb.com/qq123/7261.html
  • http://www.qqtmb.com/qq123/56621.html
  • http://www.qqtmb.com/qq123/225475.html
  • http://www.qqtmb.com/qq123/413534.html
  • http://www.qqtmb.com/qq123/73437.html
  • http://www.qqtmb.com/qq123/147374.html
  • http://www.qqtmb.com/qq123/556416.html
  • http://www.qqtmb.com/qq123/211431.html
  • http://www.qqtmb.com/qq123/41366.html
  • http://www.qqtmb.com/qq123/472376.html
  • http://www.qqtmb.com/qq123/5652.html
  • http://www.qqtmb.com/qq123/3161.html
  • http://www.qqtmb.com/qq123/6314.html
  • http://www.qqtmb.com/qq123/74427.html
  • http://www.qqtmb.com/qq123/6256.html
  • http://www.qqtmb.com/qq123/541524.html
  • http://www.qqtmb.com/qq123/414756.html
  • http://www.qqtmb.com/qq123/77221.html
  • http://www.qqtmb.com/qq123/25516.html
  • http://www.qqtmb.com/qq123/264367.html
  • http://www.qqtmb.com/qq123/15172.html
  • http://www.qqtmb.com/qq123/242224.html
  • http://www.qqtmb.com/qq123/372773.html
  • http://www.qqtmb.com/qq123/511613.html
  • http://www.qqtmb.com/qq123/757635.html
  • http://www.qqtmb.com/qq123/437667.html
  • http://www.qqtmb.com/qq123/35754.html
  • http://www.qqtmb.com/qq123/4.html
  • http://www.qqtmb.com/qq123/727775.html
  • http://www.qqtmb.com/qq123/736631.html
  • http://www.qqtmb.com/qq123/452375.html
  • http://www.qqtmb.com/qq123/11.html
  • http://www.qqtmb.com/qq123/4251.html
  • http://www.qqtmb.com/qq123/5525.html
  • http://www.qqtmb.com/qq123/72234.html
  • http://www.qqtmb.com/qq123/44674.html
  • http://www.qqtmb.com/qq123/151646.html
  • http://www.qqtmb.com/qq123/763643.html
  • http://www.qqtmb.com/qq123/124715.html
  • http://www.qqtmb.com/qq123/1441.html
  • http://www.qqtmb.com/yqwz/631531.html
  • http://www.qqtmb.com/yqwz/3146.html
  • http://www.qqtmb.com/yqwz/66722.html
  • http://www.qqtmb.com/yqwz/6462.html
  • http://www.qqtmb.com/yqwz/25757.html
  • http://www.qqtmb.com/yqwz/773665.html
  • http://www.qqtmb.com/yqwz/631531.html
  • http://www.qqtmb.com/yqwz/3146.html
  • http://www.qqtmb.com/yqwz/66722.html
  • http://www.qqtmb.com/yqwz/6462.html
  • http://www.qqtmb.com/yqwz/25757.html
  • http://www.qqtmb.com/yqwz/773665.html
  • http://www.qqtmb.com/HO15p/325731.html
  • http://www.qqtmb.com/HO15p/6741.html
  • http://www.qqtmb.com/HO15p/1133.html
  • http://www.qqtmb.com/HO15p/72273.html
  • http://www.qqtmb.com/HO15p/334636.html
  • http://www.qqtmb.com/HO15p/31217.html
  • http://www.qqtmb.com/HO112/731225.html
  • http://www.qqtmb.com/HO112/161555.html
  • http://www.qqtmb.com/HO112/32743.html
  • http://www.qqtmb.com/HO112/35257.html
  • http://www.qqtmb.com/HO112/137155.html
  • http://www.qqtmb.com/HO112/163125.html
  • http://www.qqtmb.com/HO13/751521.html
  • http://www.qqtmb.com/HO13/633.html
  • http://www.qqtmb.com/HO13/534221.html
  • http://www.qqtmb.com/HO13/75627.html
  • http://www.qqtmb.com/HO13/6525.html
  • http://www.qqtmb.com/HO13/166434.html
  • http://www.qqtmb.com/HO13/71734.html
  • http://www.qqtmb.com/HO13/73314.html
  • http://www.qqtmb.com/HO13/263455.html
  • http://www.qqtmb.com/HO13/23351.html
  • http://www.qqtmb.com/GD560/7116.html
  • http://www.qqtmb.com/Jp09/345275.html
  • http://www.qqtmb.com/Jp09/443423.html
  • http://www.qqtmb.com/Jp09/726164.html
  • http://www.qqtmb.com/Jp09/553575.html
  • http://www.qqtmb.com/hd1168/55147.html
  • http://www.qqtmb.com/GD560/625727.html
  • http://www.qqtmb.com/hd1168/5511.html
  • http://www.qqtmb.com/hd1168/11345.html
  • http://www.qqtmb.com/Jp09/36641.html
  • http://www.qqtmb.com/hd1168/542137.html
  • http://www.qqtmb.com/GD560/7122.html
  • http://www.qqtmb.com/GD560/51116.html
  • http://www.qqtmb.com/Jp09/111332.html
  • http://www.qqtmb.com/hd1168/346663.html
  • http://www.qqtmb.com/28911/57546.html
  • http://www.qqtmb.com/28911/4434.html
  • http://www.qqtmb.com/48917/2427.html
  • http://www.qqtmb.com/58910/76465.html
  • http://www.qqtmb.com/28911/176525.html
  • http://www.qqtmb.com/38912/53637.html
  • http://www.qqtmb.com/28911/15771.html
  • http://www.qqtmb.com/48917/65416.html
  • http://www.qqtmb.com/38912/665337.html
  • http://www.qqtmb.com/28911/56675.html
  • http://www.qqtmb.com/48917/12622.html
  • http://www.qqtmb.com/58910/14325.html
  • http://www.qqtmb.com/48917/2431.html
  • http://www.qqtmb.com/28911/572646.html
  • http://www.qqtmb.com/58910/54514.html
  • http://www.qqtmb.com/38912/16322.html
  • http://www.qqtmb.com/58910/23636.html
  • http://www.qqtmb.com/38912/17141.html
  • http://www.qqtmb.com/58910/3457.html
  • http://www.qqtmb.com/28911/46265.html
  • http://www.qqtmb.com/58910/23263.html
  • http://www.qqtmb.com/38912/36412.html
  • http://www.qqtmb.com/28911/262.html
  • http://www.qqtmb.com/48917/7637.html
  • http://www.qqtmb.com/28911/241342.html
  • http://www.qqtmb.com/58910/624136.html
  • http://www.qqtmb.com/48917/1731.html
  • http://www.qqtmb.com/38912/453344.html
  • http://www.qqtmb.com/48917/173641.html
  • http://www.qqtmb.com/48917/5232.html
  • http://www.qqtmb.com/38912/161512.html
  • http://www.qqtmb.com/28911/323351.html
  • http://www.qqtmb.com/28911/6617.html
  • http://www.qqtmb.com/58910/245754.html
  • http://www.qqtmb.com/58910/34.html
  • http://www.qqtmb.com/PDFax/463571.html
  • http://www.qqtmb.com/PDFar/42126.html
  • http://www.qqtmb.com/PDFax/1273.html
  • http://www.qqtmb.com/PDFab/32356.html
  • http://www.qqtmb.com/PDFac/61.html
  • http://www.qqtmb.com/PDFas/171773.html
  • http://www.qqtmb.com/dE12/755137.html
  • http://www.qqtmb.com/dE12/64722.html
  • http://www.qqtmb.com/dE12/52611.html
  • http://www.qqtmb.com/dE12/22413.html
  • http://www.qqtmb.com/dE12/54676.html
  • http://www.qqtmb.com/dE12/377275.html
  • http://www.qqtmb.com/dEor/426613.html
  • http://www.qqtmb.com/dEor/726236.html
  • http://www.qqtmb.com/dEor/56721.html
  • http://www.qqtmb.com/dEor/24413.html
  • http://www.qqtmb.com/dEor/754751.html
  • http://www.qqtmb.com/dEor/31542.html
  • http://www.qqtmb.com/dEor/66376.html
  • http://www.qqtmb.com/dEor/31711.html
  • http://www.qqtmb.com/dEor/71723.html
  • http://www.qqtmb.com/dEor/43515.html
  • 北京赛车pk10 申博官网 北京赛车pk10 六台宝典现场开奖 北京赛车pk10历史记录 北京赛车开奖 北京赛车预测 949494开奖结果今晚 威尼斯人线上娱乐 手机投注平台 幸运28投注技巧 pk10助赢软件 北京pk10百度鼎盛彩票网 北京赛车聚彩 北京pk10如何稳杀3码 pk10稳赢方法 pk10定位计划 pk10包赢计划群