查看: 8183|回复: 36

不同环境,相同语句,效率差别巨大,差的机器快的多!

[复制链接]
认证徽章
论坛徽章:
50
2014年世界杯参赛球队: 荷兰
日期:2014-07-11 07:56:59蛋疼蛋
日期:2012-03-06 07:22:542012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-01-04 11:53:29蛋疼蛋
日期:2011-11-11 15:47:00ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
发表于 2010-3-11 23:05 | 显示全部楼层 |阅读模式
具体见附件1-2.rar

其中1.log是快,大致4秒跑完。 2.log 慢,要230秒左右跑完,差距大几十倍。

1.log所在的环境是自己的笔记本,10G数据库,机器配置低下。
而2.log是服务器,也是10G数据库,机器配置强大,反而执行的慢!!!


查看执行计划还是有差别的,前者居然有笛卡尔连接还更快!逻辑读前者小很多!
非常纳闷

关键之处在于如下
Select t.Primary_Id "$PRIMARY_ID",
                                Sum(t.Has_Read) "$HAS_READ"
                           From Tree_Privilege t
                          Where t.Tree_Cfg_Name = 'NET_ELEMENT'
                            And t.Assign_Object In ('STAFF_3', 'ORG_2', 'STATION_22'
这个结果集如果返回非常少,那2.log的情况还执行很快。一多,就慢的要命。
而1.log的关键之处语句不管多少,几十万条,还是可以非常快。

奇怪到无语。另外大致两台的数据库参数如optimizer_index_cost_adj 等等比较了,没啥大区别,大多都是默认值

此外从优化角度来说,可以修改为分页写法,不过奇怪的是,分页写法对改善性能没啥提升,这个也是一怪之一,不过且不说优化,就说同一语句芳在不同环境差别巨大,确实让人郁闷,快的那个在4秒内,已经符合要求了,无需优化了,还是自己的烂笔记本!

另外强调一下,两个环境都做过全分析了

[ 本帖最后由 wabjtam123 于 2010-3-11 23:22 编辑 ]

1-2.rar

6.14 KB, 下载次数: 47

论坛徽章:
20
2010年世界杯参赛球队:韩国
日期:2009-12-20 20:11:33沸羊羊
日期:2015-03-26 14:41:40暖羊羊
日期:2015-06-15 10:03:48天枰座
日期:2015-07-18 17:23:54托尼托尼·乔巴
日期:2017-01-25 09:38:19秀才
日期:2017-03-02 10:30:14秀才
日期:2017-03-02 10:30:35秀才
日期:2017-06-29 10:16:48技术图书徽章
日期:2017-07-11 09:10:262015年新春福章
日期:2015-03-06 11:57:31
发表于 2010-3-11 23:40 | 显示全部楼层
两个环境NE_ALARM_LIST        数据量一样吗?都是多少?

使用道具 举报

回复
论坛徽章:
1
2008新春纪念徽章
日期:2008-02-13 12:43:03
发表于 2010-3-11 23:48 | 显示全部楼层
数据块的分布不同是不是问题之一?

使用道具 举报

回复
论坛徽章:
44
双鱼座
日期:2016-01-07 20:57:31奔驰
日期:2013-08-02 22:22:552013年新春福章
日期:2013-02-25 14:51:24迷宫蛋
日期:2013-01-29 22:12:11蛋疼蛋
日期:2013-01-07 15:50:53ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28紫蛋头
日期:2011-07-31 11:27:01蜘蛛蛋
日期:2011-06-14 14:20:33蛋疼蛋
日期:2011-06-03 19:39:27SQL大赛参与纪念
日期:2011-04-13 12:08:17
发表于 2010-3-12 09:39 | 显示全部楼层
37494576  consistent gets?

服务器上Oracle 连续运行多久了?

使用道具 举报

回复
论坛徽章:
281
2015年新春福章
日期:2015-03-06 11:57:312012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-01-04 11:51:22蛋疼蛋
日期:2011-12-29 07:37:22迷宫蛋
日期:2011-12-26 14:19:41茶鸡蛋
日期:2011-11-17 09:20:52茶鸡蛋
日期:2011-11-10 22:42:38ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15茶鸡蛋
日期:2011-10-24 09:48:48ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47
发表于 2010-3-12 09:45 | 显示全部楼层
执行计划不同导致执行性能有差异实在太正常不过了~~
你可以先试试给慢的加hint,让其执行计划与快的机器上相同试试看效率

使用道具 举报

回复
论坛徽章:
37
2008新春纪念徽章
日期:2008-02-13 12:43:032010广州亚运会纪念徽章:击剑
日期:2011-01-22 20:59:112011新春纪念徽章
日期:2011-02-18 11:43:33茶鸡蛋
日期:2011-08-05 15:44:24ITPUB十周年纪念徽章
日期:2011-11-01 16:21:152012新春纪念徽章
日期:2012-01-04 11:51:22玉石琵琶
日期:2012-02-21 15:04:38ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:202013年新春福章
日期:2013-02-25 14:51:24劳斯莱斯
日期:2013-09-12 15:56:37
发表于 2010-3-12 10:29 | 显示全部楼层
第二个的逻辑读比第一个多多了

使用道具 举报

回复
论坛徽章:
37
2008新春纪念徽章
日期:2008-02-13 12:43:032010广州亚运会纪念徽章:击剑
日期:2011-01-22 20:59:112011新春纪念徽章
日期:2011-02-18 11:43:33茶鸡蛋
日期:2011-08-05 15:44:24ITPUB十周年纪念徽章
日期:2011-11-01 16:21:152012新春纪念徽章
日期:2012-01-04 11:51:22玉石琵琶
日期:2012-02-21 15:04:38ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:202013年新春福章
日期:2013-02-25 14:51:24劳斯莱斯
日期:2013-09-12 15:56:37
发表于 2010-3-12 10:40 | 显示全部楼层
看看有哪些等待事件

使用道具 举报

回复
认证徽章
论坛徽章:
50
2014年世界杯参赛球队: 荷兰
日期:2014-07-11 07:56:59蛋疼蛋
日期:2012-03-06 07:22:542012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-01-04 11:53:29蛋疼蛋
日期:2011-11-11 15:47:00ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
发表于 2010-3-12 11:11 | 显示全部楼层
多谢各位回复
早上过来又看了看,首先比较是否是数据分布不均衡问题,结果发现有一点点不同

UNIX服务器上
select table_name,num_rows,blocks from user_tables where lower(table_name) in
    ('ne_alarm_list'
    ,'tp_domain_listvalues'
    ,'net_element'
    ,'kpi_code_list'
    ,'manage_region'
    ,'kpi_mapping_cfg'
    ,'ne_trans_alarm'
    ,'tree_privilege')
   order by table_name;

TABLE_NAME                       NUM_ROWS     BLOCKS
------------------------------ ---------- ----------
KPI_CODE_LIST                       64018       1378
KPI_MAPPING_CFG                      4063         20
MANAGE_REGION                         237          5
NET_ELEMENT                        103485       1882
NE_ALARM_LIST                      138278      15197
NE_TRANS_ALARM                          0          5
TP_DOMAIN_LISTVALUES                 1121         13
TREE_PRIVILEGE                       2443       4780

8 rows selected

SQL>


本地笔记本
select table_name,num_rows,blocks from user_tables where lower(table_name) in
    ('ne_alarm_list'
    ,'tp_domain_listvalues'
    ,'net_element'
    ,'kpi_code_list'
    ,'manage_region'
    ,'kpi_mapping_cfg'
    ,'ne_trans_alarm'
    ,'tree_privilege')
   order by table_name;

TABLE_NAME                       NUM_ROWS     BLOCKS
------------------------------ ---------- ----------
KPI_CODE_LIST                       64018       1378
KPI_MAPPING_CFG                      4063         20
MANAGE_REGION                         237          5
NET_ELEMENT                        103485       1440
NE_ALARM_LIST                      138278      12901
NE_TRANS_ALARM                          0          0
TP_DOMAIN_LISTVALUES                 1121         13
TREE_PRIVILEGE                       2443         21

8 rows selected

SQL>


本地笔记本:

SQL> select table_name,index_name,blevel,leaf_blocks from user_indexes where lower(table_name) in
   ('ne_alarm_list'
    ,'tp_domain_listvalues'
    ,'net_element'
    ,'kpi_code_list'
    ,'manage_region'
    ,'kpi_mapping_cfg'
    ,'ne_trans_alarm'
    ,'tree_privilege')
10  order by table_name;

TABLE_NAME                     INDEX_NAME                         BLEVEL LEAF_BLOCKS
------------------------------ ------------------------------ ---------- -----------
KPI_CODE_LIST                  PK_KPI_CODE_LIST                        1         230
KPI_MAPPING_CFG                PK_KPI_MAPPING_CFG                      1          16
MANAGE_REGION                  PK_MANAGE_REGION                        0           1
MANAGE_REGION                  IDX_REGION_141                          0           1
NET_ELEMENT                    PK_NET_ELEMENT                          1         332
NET_ELEMENT                    IDX_NE_ELEM_PARENT_NE_ID                1         365
NE_ALARM_LIST                  IDX_CREATE_TIME                         2         544
NE_ALARM_LIST                  IDX_ALARM_LIST_NE_ID                    1         435
NE_ALARM_LIST                  IDX_ALARM_NE_CONFIG_ID                  1         339
NE_ALARM_LIST                  PK_NE_ALARM_LIST                        1         425
NE_ALARM_LIST                  IDX_ALARM_LIST_FLOW_ID                  1         377
NE_TRANS_ALARM                 IDX_NE_TRAN_LIST_ID                     0           0
NE_TRANS_ALARM                 PK_NE_TRANS_ALARM                       0           0
TREE_PRIVILEGE                 PK_TREE_PRIVILEGE                       1          13

14 rows selected

服务器:

select table_name,index_name,blevel,leaf_blocks from user_indexes where lower(table_name) in
    ('ne_alarm_list'
    ,'tp_domain_listvalues'
    ,'net_element'
    ,'kpi_code_list'
    ,'manage_region'
    ,'kpi_mapping_cfg'
    ,'ne_trans_alarm'
    ,'tree_privilege')
   order by table_name;

TABLE_NAME                     INDEX_NAME                         BLEVEL LEAF_BLOCKS
------------------------------ ------------------------------ ---------- -----------
KPI_CODE_LIST                  PK_KPI_CODE_LIST                        1         170
KPI_MAPPING_CFG                PK_KPI_MAPPING_CFG                      1          19
MANAGE_REGION                  PK_MANAGE_REGION                        0           1
NET_ELEMENT                    IDX_NE_ELEM_PARENT_NE_ID                1         241
NET_ELEMENT                    IDX_NE_ELEM_NE_NAME                     2         367
NET_ELEMENT                    IDX_STATE_PATH                          2         768
NET_ELEMENT                    PK_NET_ELEMENT                          1         369
NET_ELEMENT                    IDX_NE_ELEM_STATE                       1         234
NET_ELEMENT                    IDX_NE_PATH                             2         656
NET_ELEMENT                    IDX_NEID_NETYPEID                       1         317
NET_ELEMENT                    IDX_NE_ELEM_NET_TYPE_ID                 1         237
NE_ALARM_LIST                  PK_NE_ALARM_LIST                        1         338
NE_TRANS_ALARM                 PK_NE_TRANS_ALARM                       0           0
TREE_PRIVILEGE                 PK_TREE_PRIVILEGE                       2        5059


看来TREE_PRIVLEGE确实有空块很多,不过感觉察觉不太明显,不过还是做了下面这个动作
把表和所引进都重新组织了一下
select table_name,index_name,blevel,leaf_blocks
,'alter table '||table_name||' move;','alter index '||index_name||' rebuild;'
from user_indexes where lower(table_name) in
('ne_alarm_list'           
,'tp_domain_listvalues'  
,'net_element'  
,'kpi_code_list'  
,'manage_region'  
,'kpi_mapping_cfg'  
,'ne_trans_alarm'  
,'tree_privilege')
order by table_name;


再比较就很贴近了,就不贴出来了。

不过发现依然慢,执行计划仍然不同,哎,怪!(对了,我前后都不停的做如下的全分析
analyze table Ne_Alarm_List             compute statistics for table for all indexes for all indexed columns;
analyze table Tp_Domain_Listvalues      compute statistics for table for all indexes for all indexed columns;
analyze table Net_Element               compute statistics for table for all indexes for all indexed columns;
analyze table Kpi_Code_List             compute statistics for table for all indexes for all indexed columns;
analyze table Manage_Region             compute statistics for table for all indexes for all indexed columns;
analyze table Kpi_Mapping_Cfg           compute statistics for table for all indexes for all indexed columns;
analyze table Ne_Trans_Alarm            compute statistics for table for all indexes for all indexed columns;
analyze table Tree_Privilege            compute statistics for table for all indexes for all indexed columns;)


看来和数据分布无关了!

逻辑读依然巨大无比!!!


那看看等待事件吧
跟踪的时候,等待事件是 latch: cache buffers chains
wait class 是 Concurrency
P1 :1374090756
P2:122
P3:0
然后我代入三个值,居然查找不到热点块记录,我这个并不是RAC

select owner,segment_name,segment_type
from dba_extents
where file_id = &file_id and &block_id between block_id
and block_id + &blocks - 1;

难道这是热点块问题引起的?
现在可以确认的是,一定是UNIX服务器的机器的数据库有问题,因为我又在另一个别人笔记本的新环境把数据一摸一样的搞进来,奇快无比,也是4秒,服务器始终是230多秒跑完!


此外有点怪异,查最频繁访问的对象都是系统级的?
SQL>
SQL> select object_name
  2  from user_objects
  3  where data_object_id in
  4  (select obj
  5  from (select obj
  6  from x$bh order by tch desc) where rownum < 8);

OBJECT_NAME
--------------------------------------------------------------------------------
SYSAUTH$
PROPS$
I_SYSAUTH1
SERVICE$


是否需要我在跑的时候做一个10046或者做一个AWR报表扔上来给各位兄弟看看,太诡异了,唉
哦,好像索引有点不一样,把他们搞成一致再看看

[ 本帖最后由 wabjtam123 于 2010-3-12 11:54 编辑 ]

使用道具 举报

回复
认证徽章
论坛徽章:
50
2014年世界杯参赛球队: 荷兰
日期:2014-07-11 07:56:59蛋疼蛋
日期:2012-03-06 07:22:542012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-01-04 11:53:29蛋疼蛋
日期:2011-11-11 15:47:00ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
发表于 2010-3-12 12:13 | 显示全部楼层
不过看执行计划,多出来的索引也没用到笔记本环境中啊


笔记本环境

SQL> select  table_name,index_name,column_name,column_position from user_ind_columns where lower(table_name) in
       ('ne_alarm_list'
        ,'tp_domain_listvalues'
        ,'net_element'
        ,'kpi_code_list'
        ,'manage_region'
        ,'kpi_mapping_cfg'
        ,'ne_trans_alarm'
        ,'tree_privilege')
      order by table_name ,column_position asc;

TABLE_NAME                     INDEX_NAME                     COLUMN_NAME         COLUMN_POSITION
------------------------------ ------------------------------ ------------------- ---------------
KPI_CODE_LIST                  PK_KPI_CODE_LIST               KPI_ID                            1
KPI_MAPPING_CFG                PK_KPI_MAPPING_CFG             KPI_ID                            1
MANAGE_REGION                  PK_MANAGE_REGION               REGION_ID                         1
MANAGE_REGION                  IDX_REGION_141                 PARENT_REGION_ID                  1
NET_ELEMENT                    PK_NET_ELEMENT                 NE_ID                             1
NET_ELEMENT                    IDX_NE_ELEM_PARENT_NE_ID       PARENT_NE_ID                      1
NE_ALARM_LIST                  PK_NE_ALARM_LIST               NE_ALARM_LIST_ID                  1
NE_ALARM_LIST                  IDX_CREATE_TIME                SYS_NC00052$                      1
NE_ALARM_LIST                  IDX_ALARM_NE_CONFIG_ID         CONFIG_NE_ID                      1
NE_ALARM_LIST                  IDX_ALARM_LIST_NE_ID           NE_ID                             1
NE_ALARM_LIST                  IDX_ALARM_LIST_FLOW_ID         FLOW_ID                           1
NE_TRANS_ALARM                 PK_NE_TRANS_ALARM              NE_TRANS_ALARM_ID                 1
NE_TRANS_ALARM                 IDX_NE_TRAN_LIST_ID            NE_ALARM_LIST_ID                  1
TREE_PRIVILEGE                 PK_TREE_PRIVILEGE              TREE_CFG_NAME                     1
TREE_PRIVILEGE                 PK_TREE_PRIVILEGE              PRIMARY_ID                        2
TREE_PRIVILEGE                 PK_TREE_PRIVILEGE              ASSIGN_OBJECT                     3

16 rows selected



服务器环境

SQL> select  table_name,index_name,column_name,column_position from user_ind_columns where lower(table_name) in
       ('ne_alarm_list'
        ,'tp_domain_listvalues'
        ,'net_element'
        ,'kpi_code_list'
        ,'manage_region'
        ,'kpi_mapping_cfg'
        ,'ne_trans_alarm'
        ,'tree_privilege')
      order by table_name ,column_position asc;

TABLE_NAME                     INDEX_NAME                     COLUMN_NAME         COLUMN_POSITION
------------------------------ ------------------------------ ------------------- ---------------
KPI_CODE_LIST                  PK_KPI_CODE_LIST               KPI_ID                            1
KPI_MAPPING_CFG                PK_KPI_MAPPING_CFG             KPI_ID                            1
MANAGE_REGION                  PK_MANAGE_REGION               REGION_ID                         1
NET_ELEMENT                    PK_NET_ELEMENT                 NE_ID                             1
NET_ELEMENT                    IDX_NEID_NETYPEID              NE_ID                             1
NET_ELEMENT                    IDX_STATE_PATH                 STATE                             1
NET_ELEMENT                    IDX_NE_ELEM_STATE              STATE                             1
NET_ELEMENT                    IDX_NE_ELEM_PARENT_NE_ID       PARENT_NE_ID                      1
NET_ELEMENT                    IDX_NE_ELEM_NET_TYPE_ID        NE_TYPE_ID                        1
NET_ELEMENT                    IDX_NE_ELEM_NE_NAME            NE_NAME                           1
NET_ELEMENT                    IDX_NE_PATH                    PATH                              1
NET_ELEMENT                    IDX_NEID_NETYPEID              NE_TYPE_ID                        2
NET_ELEMENT                    IDX_STATE_PATH                 PATH                              2
NE_ALARM_LIST                  PK_NE_ALARM_LIST               NE_ALARM_LIST_ID                  1
NE_TRANS_ALARM                 PK_NE_TRANS_ALARM              NE_TRANS_ALARM_ID                 1
TREE_PRIVILEGE                 PK_TREE_PRIVILEGE              TREE_CFG_NAME                     1
TREE_PRIVILEGE                 PK_TREE_PRIVILEGE              PRIMARY_ID                        2
TREE_PRIVILEGE                 PK_TREE_PRIVILEGE              ASSIGN_OBJECT                     3

18 rows selected

SQL>

使用道具 举报

回复
论坛徽章:
1
2010新春纪念徽章
日期:2010-03-01 11:19:07
发表于 2010-3-12 12:32 | 显示全部楼层
还是把两端索引整成一样的在比较吧。
好像笔记本用到了IDX_NE_TRAN_LIST_ID索引,而服务器上没有这个索引。

使用道具 举报

回复

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

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表