科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Oracle数据库诊断性能问题

Oracle数据库诊断性能问题

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

  使用扩展SQL跟踪数据来了解是什么在耗费这么长的时间。      假如有一天你开车去上班,但最后还是没能及时参加一个重要会议。你无法将你的革命性的想法呈现给客户,所以他们也不会采用。你的拖拖拉拉使你感到沮丧,你发誓决不再犯同样的错误。那么。

作者:中国IT实验室 来源:中国IT实验室 2007年10月5日

关键字: 优化 数据库 ORACLE

  • 评论
  • 分享微博
  • 分享邮件

  使用扩展SQL跟踪数据来了解是什么在耗费这么长的时间。
  
  假如有一天你开车去上班,但最后还是没能及时参加一个重要会议。你无法将你的革命性的想法呈现给客户,所以他们也不会采用。你的拖拖拉拉使你感到沮丧,你发誓决不再犯同样的错误。那么,为了不再发生类似情况,你怎么判断问题的原因呢?按照下面这个列表进行检查怎么样?
  
  检查汽车外表是否有缺陷,因为外表有缺陷会使汽车的最高速度降低1%或更多。
  
  检查车轮定位,因为外倾角、后倾角或前束角不合适都会导致汽车的操纵不灵活并且耗费时间。
  
  检查发动机,以确保达到额定马力的99%或更高。如果不是这样,则要考虑重装或更换发动机。
  
  不,你可能不会采用这种检查方法;那样太可笑了。你可能会以完全不同的方式来判断问题之所在,可能只是问你自己一个简单的问题:什么事情让我花了这么长时间?
  
  从这个角度出发,问题就迎刃而解了。如果开车需要40分钟,而你在会议开始前20分钟才动身,那么下次就要提前30分钟动身。如果因为交通拥堵浪费了20分钟,那么,下次要么再早一些动身,换条路线,要么更仔细地查看早7点的路况报告。如果是你迷了路,结果浪费了20分钟去兜圈子,那么下次你大概就要事先看看地图。如此等等。
  
  我感到奇怪的是,那些擅长解决日常性能优化问题的数据库专业人员在工作中却使用完全不同的方法来解决数据库性能问题。许多数据库"调优人员"从来不问,"是什么让这个程序运行了这么长时间?"相反,他们会参考检查内容清单,并试图阻止错误发生:
  
  检查所有Oracle块请求是否都由数据库缓存提供服务
  
  检查是否有全表扫描
  
  检查所有排序是否都在内存中进行
  
  检查重做日志是否与其他所有数据库文件进行了适当的隔离等等。
  
  对于某些工作来说,使用检查内容清单也许很好。但是对于判断性能问题这样的工作,试图确定理论上可能会出错的每一件事,从而对这个问题进行处理的做法的效率会很低。更有效的方法就是找到这个简单问题的答案:
  
  是什么花了这么长时间?
  
  用于优化Oracle程序的好的策略就如同日常生活中用到的策略。就像这样:
  
  使用专门的仪器来测定程序的性能,从而监视运行速度慢的程序。
  
  为运行慢的程序创建资源描述,把程序的响应时间细分为几种有用的类型。
  
  通过首先处理响应时间最长的部分来缩短程序的响应时间。
  
  当你了解了若干技术细节之后,这个方法就非常简单了。如果你真的这样做,那么每次你都能获得一个有用的方法,久而久之,你将能在进行性能改进之前预知其结果。
  
  跟踪
  
  如果你有用于收集程序中每个执行步骤的时间统计信息的高级工具,那就用吧。但只收集汇总数据(如通过对系统全局区[SGA]或其基础共享存储段采样获得的数据)的工具对于某些类型的问题就不适合。
  
  使用昂贵的监控工具时最常见的汇总错误是它们会跨整个Oracle数据库实例来汇总某一给定时间间隔内资源的使用情况。但是,运行速度慢的程序实际上可能不受资源争用问题的影响,而这个问题却完全控制着系统中一些不太重要的程序的性能。
  
  即便是那些在Oracle数据库会话级上汇总信息的工具在诊断一些重要的问题类型时也存在着缺陷。例如,假设一个程序运行10分钟,调用了10000次Oracle SQL*Net message from client 这一"等待事件",会话等待该事件的总用时为8.3分钟。这意味着会话对SQL*Net message from client事件的等待时间平均为3秒。但是单从汇总数据看,你无法知道这10000次调用是否每次都用3秒,还是这些调用中也许有一个用了5分钟,而其余9999次调用每次只用0.02秒。这两种情况需要进行完全不同的处理。
  
  在这种情况下最能为你提供帮助的诊断数据是Oracle的扩展SQL跟踪数据。扩展SQL跟踪文件按时间顺序显示了Oracle数据库内核在指定时间内所完成工作的逐条记录。收集扩展SQL跟踪数据几乎是免费的。最大的花销是存储每一个需要引起注意的跟踪文件所需磁盘空间(很少超过几兆字节)的费用。
  
  跟踪自己的代码。如果能访问程序的源代码,则打开其扩展SQL跟踪就非常容易。首先必须确保会话的TIMED_STATISTICS和MAX_DUMP_ FILE_SIZE参数设置正确:
  
  alter session
  set timed_statistics=true
  alter session
  set max_dump_file_size=unlimited
  
  如果没有设置TIMED_STATISTICS=TRUE,则数据库内核将把0值而不是真正的持续时间发送到跟踪文件中。如果对MAX_DUMP_ FILE_SIZE严加限制,则会在跟踪文件中生成下面这样的消息,而不是你想要的时间数据:
  
  *** DUMP FILE SIZE IS LIMITED TO 1048576 BYTES ***
  
  接下来是激活跟踪。有几种方法可以采用。过去的方法是使用ALTER SESSION命令,如下所示:
  
  alter session set events
  '10046 trace name context forever, level 12'
  /* code to be traced goes here */
  alter session set events
  '10046 trace name context off'
  
  更好的方法是使用DBMS_SUPPORT包来激活扩展SQL跟踪:
  
  dbms_support.start_trace(waits=>true, binds=>true)
  /* code to be traced goes here */
  dbms_support.stop_trace()
  
  请注意DBMS_SUPPORT 没有文档说明,可能也不是数据库默认安装的一部分。要了解DBMS_SUPPORT的信息,请参考MetaLink ( metalink.oracle.com)。
  
  跟踪别人的代码。如果你想跟踪没有读/写权限的代码,则激活扩展SQL跟踪就有点麻烦了。但也不会难很多。你首先要获得你想跟踪的会话的V$SESSION.SID和V$SESSION.SERIAL#值。然后使用下面的过程调用,可以设置所选会话的TIMED_STATISTICS和MAX_DUMP_FILE_SIZE参数:
  
  dbms_system.set_bool_param_in_session(
  sid   => 42,
  serial# => 1215,
  parnam => 'timed_statistics',
  bval  => true)
  
  dbms_system.set_int_param_in_session(
  sid   => 42,
  serial# => 1215,
  parnam => 'max_dump_file_size',
  intval => 2147483647)
  
  (对于Oracle8 8.1.6以前的版本,你可以用ALTER SYSTEM命令处理这些参数。)
  
  接下来要激活跟踪。有几种方法可以采用,包括下面两个:
  
  方法一是使用DBMS_SUPPORT:
  
  dbms_support.start_trace_in_session(
  sid   => 42,
  serial# => 1215,
  waits  => true,
  
  binds  => true)
  /* code to be traced executes during this time window */
  dbms_support.stop_trace_in_session(
  sid   => 42,
  serial  => 1215)
  
  若想激活扩展SQL跟踪,请不要使用名为SET_SQL_TRACE_IN_SESSION的DBMS_SUPPORT过程。该过程不允许在跟踪文件中指定等待和绑定的数据。
  
  第二种方法更为精致,但在Oracle数据库10g之前的版本中并不支持这种方法。 DBMS_MONITOR包的引入解决了许多复杂诊断数据收集问题,这些问题是由连接共享和多线程操作所引起的。你可以在Oracle数据库10g中指定要跟踪的服务、模块或行动,而不指定要跟踪的Oracle数据库会话:
  
  dbms_monitor.serv_mod_act_trace_enable(
  service_name => 'APPS1',
  module_name  => 'PAYROLL',
  action_name  => 'PYUGEN',
  
  waits     => true,
  binds     => true,
  instance_name => null)
  /* code to be traced executes during this time window */
  dbms_monitor.serv_mod_act_trace_disable(
  service_name => 'APPS1',
  module_name  => 'PAYROLL',
  action_name => 'PYUGEN')
  
  利用DBMS_MONITOR包,Oracle可为要跟踪的特定的业务操作提供完全支持激活或停止诊断数据收集的方法。
  
  测试扩展SQL跟踪。试一试吧。查看第一个跟踪文件只需使用一个简单的SQL*Plus会话,就如同下面这样:
  
  alter session
  set timed_statistics=true;
  alter session
  set max_dump_file_size=unlimited;
  
  alter session
  set tracefile_identifier='Hello';
  /* only in Oracle Database 8.1.7
  and later */
  alter session
  set events '10046 trace name context forever, level 12';
  select 'Howdy, it is '||sysdate from dual;
  exit;
  
  然后在由USER_DUMP_DEST实例参数的值命名的目录中寻找文件名中包含字符串"Hello"的最新写入的.trc文件。用你最喜欢的文本编辑器打开它。 阅读Oracle MetaLink注释39817.1或(Optimizing Oracle Performance,《优化Oracle性能》)一书,以便大概了解原始跟踪文件中有些什么。一定要运行跟踪文件上的tkprof,并研究其输出,但也不要由于有了tkprof就不再看原始的跟踪文件。跟踪文件中还有许多tkprof没有向你展示的内容。
  
  如果你不仅需要一个由简单的SELECT from DUAL 生成的跟踪文件,还需要一个更感兴趣的跟踪文件,那么需要跟踪下面这条SQL语句:
  
  select object_type, owner, object_name from dba_objects;
  
  由此得到的跟踪数据会让你感到很满意,因为Oracle数据库内核替你完成了惊人的工作量。
  
  创建资源描述
  
  有了正确而详细的诊断数据之后,你需要以摘要的形式对其进行查看,这有助于你以最快的速度做出响应。至少是从20世纪70年代开始,计算机程序员使用的摘要格式就是资源描述。资源描述只是一张表,它将所用时间分解为若干有用的子集,并按各子集所用时间降序排列。下面是一个资源描述的例子:
  
  Response Time Component   Duration
  -------------------------- ----------
  Freeway at <50% speed limit 28.3m 59%
  Finding a parking spot    7.2m 15%
  Waiting at traffic lights  5.2m 11%
  Freeway at ≥50% speed limit 4.0m  8%
  Other            3.1m  6%
  -------------------------- ----------
  Total            47.8m 100%
  
  这个资源描述说明买一辆速度更快的车不会使你能够更快地到达工作地点。
  
  要从跟踪文件创建资源描述,有两种方法可以采用。
  
  自己动手。《Optimizing Oracle Performance》一书中有所说明。
  
  使用别人的工具。Oracle的tkprof和trcanalyzer(跟踪分析器)工具可为你完成一部分工作,但不是全部。
  
  对数据做出响应
  
  有了详细的诊断数据及其要点,就要决定对所看到的东西如何做出响应。对资源描述做出响应的经验做法非常可靠且相当简单:首先减少花费时间最长的部分,方法是减少调用它的次数。 下一步
  
  这种方法几乎总是正确的。理解减少给定组件的调用次数的方法,需要对不同等待事件名称的含义有所了解。例如,当被跟踪的Oracle会话等待"buffer busy waits"这个等待事件时,该会话会向跟踪文件发送会生成足够多的信息,并显示正在等待哪一个缓冲区以及为什么要等待。当一个会话等待SQL*Net message from client事件时,跟踪文件中生成的数据的位置会告诉你执行过的数据库调用哪个是多余的。
  
  在Oracle9i第2版中,有350多个不同的等待事件。在Oracle数据库10g中,几乎有700个等待事件。但不必担心:你根本不必知道它们都是什么意思。你只需知道你的重要程序花费大部分时间所等待的那些事件是什么意思。
  
  看看你能做些什么
  
  有了合适的诊断数据,你就能迅速解决相应的问题,或者证明这些问题不值得解决。
  
  下面给出诊断数据能够解决的一部分问题清单:
  
  整个系统的问题以及个别用户(业务)操作的具体问题
  
  查询错误,包括写得不好的SQL语句、有问题的索引以及数据密度问题
  
  A应用程序错误,包括解析过度、不使用数组运算等等在内的应用程序
  
  串行化错误,包括不必要的频繁发生或费时的锁定、锁存或存储缓冲区活动
  
  网络错误,如选择的协议不当、网络设备有问题
  
  磁盘输入/输出错误,如高速缓存大小不适当、负载不平衡以及配置不当
  
  容量不足,如交换、分页和CPU占用过多
  
  使用Oracle的扩展SQL跟踪数据以及提出"什么如此费时?"这种问题的方法能带来的最好结果是在开始诊断和解决问题之前你将不必再猜测性能问题会是什么。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鎯у⒔閹虫捇鈥旈崘顏佸亾閿濆簼绨绘い鎺嬪灪閵囧嫰骞囬鍡欑厯闂佸搫琚崝鎴﹀箖閵忋倕浼犻柛鏇熷灟閸ㄤ粙寮婚敐澶樻晣闁绘洑鐒﹂悿浣肝旈悩闈涗沪闁绘娲濊ぐ浣割渻閵堝棗鍧婇柛瀣尭閳规垿妾遍柛瀣姉濡叉劙骞掑Δ鈧粻娑欍亜閹炬瀚弶褰掓⒒娴e憡鎯堥柣顓烆槺閹广垹鈹戦崱娆愭闂佸壊鍋呭ú鏍偂濞戞◤褰掓晲婢跺鏆犻梺娲诲亜缁绘ê顫忕紒妯诲闁告稑锕ラ崕鎾愁渻閵堝棗鐏ラ柟铏耿瀵粯绻濋崶銊︽珳婵犮垼娉涢敃銊╁箺閺囥垺鈷戦柛婵嗗缁侇偆绱掓潏銊︾闁诡喖娼¢崺鈧い鎺戝閻撶喖骞栭幖顓炵仯缂佸娼ч湁婵犲﹤鎳庢禒锔剧磼閸屾稑娴柟顔界懇椤㈡宕掑⿰鍛潓濠电姷鏁搁崑娑㈡偋閸℃稒鍊舵繝闈涱儐閸婂爼鏌eΟ鑲╁笡闁绘挸绻橀弻娑㈩敃閵堝懏鐎鹃梺绋匡攻閸旀鍩€椤掍緡鍟忛柛鐘崇墵閳ワ箑鐣¢柇锕€娈ㄩ梺鍦檸閸犳寮查鍕厱闁哄洢鍔岄獮妤佺節閵忊€崇伌婵﹨娅i幏鐘诲箵閹烘垶鐦g紓鍌氬€哥粔鏉懳涘▎鎴犵焿鐎广儱顦崘鈧銈嗘尵閸嬬喖鏁嶅☉銏♀拺閻熸瑥瀚粈鍐┿亜閺囧棗娲ょ粈鍐煃瑜滈崜娆撯€旈崘顔嘉ч柛鈩兠拕濂告⒑閸涘﹥鐓ユ繛鎾棑閸掓帒鈻庨幒鏃傛澑濠电偞鍨堕悷銏ゅ箯濞差亝鐓熼柣妯哄帠閼割亪鏌涢弬鑳闁宠绉归獮鍥偋閸垹骞嶉梻浣告啞閸垶宕愰弽顐熷亾濮樼偓瀚�

    婵犵數濮烽弫鍛婃叏閻戣棄鏋侀柛娑橈攻閸欏繘鏌i幋锝嗩棄闁哄绶氶弻娑樷槈濮楀牊鏁鹃梺鍛婄懃缁绘﹢寮婚敐澶婄婵犲灚鍔栫紞妤呮⒑闁偛鑻晶顕€鏌涙繝鍌涜础缂侇喖顑夐獮鎺楀棘閸濆嫪澹曢梺鎸庣箓缁ㄨ偐鑺辨禒瀣厱闁哄啯鎸鹃悾杈ㄣ亜椤忓嫬鏆e┑鈥崇埣瀹曞崬螖閳ь剙岣块幋锔解拺缂佸顑欓崕鎰版煙閻熺増鍠樼€殿喛顕ч埥澶愬閳ュ厖绨婚梻鍌欑閻忔繈顢栭崨顔绢浄闁圭虎鍠楅埛鎴犵磼椤栨稒绀冮柡澶婄秺閺屾稓鈧綆鍋呯亸顓熴亜椤忓嫬鏆e┑鈥崇埣瀹曞崬螖閳ь剙岣块幋锔解拺缂佸顑欓崕鎰版煙缁嬪灝鈷旀俊鍙夊姍楠炴﹢骞囨担鍛婂€梻浣告啞缁矂宕幎钘夎Е妞ゆ劏鎳¢弮鍫熷亹闂傚牊绋愮划鍫曟⒑閸濄儱娅忛柛瀣樀閹﹢骞掑Δ浣哄幗闂佺粯锚瀵墎绮氶崸妤佸€堕煫鍥ㄦ⒒閹冲懐绱掗鍡欑М闁诡喗鐟╅幃婊兾熼柨瀣伖闂佽崵鍠愮划搴㈡櫠濡ゅ啯鏆滈柟鐑樻尵椤╂彃霉閻撳海鎽犻柣鎾存礋閺岀喖骞嗚閸ょ喐绻涢崣澶嬪唉闁哄瞼鍠栭、娆撴寠婢跺﹤袘闂佺粯鎸堕崐鏍Φ閸曨喚鐤€闁圭偓娼欏▍婵嬫⒑瑜版帗鏁辨俊鐐舵椤繑绻濆顒傦紲濠殿喗锚瀹曨剟路閳ь剟姊绘担鍛婂暈妞ゃ劌妫楃叅闁绘棃顥撻弳锕€鈹戦崒婧撶懓鏁梻渚€娼ч敍蹇涘礋椤撶偛鍙婂┑鐘垫暩婵兘寮崨濠冨弿闁圭虎鍠楅弲婵嬫煏閸繃绀岄柛瀣尭椤繈鎮℃惔锛勭潉闁诲氦顫夊ú鈺冪礊閳ь剛绱掗悩宕囨创鐎殿噮鍣e畷鎺戔堪閸涱噮娼撳┑鐘垫暩婵兘寮崨濠冨弿闁圭虎鍠栫壕鍦磽娴h偂鎴濃枍閻樺磭绠鹃柟瀛樼懃閻忣亪鏌i幘瀛樼闁诡喗顨婇弫鎰板礃閵娿儺鐎冲┑鐘殿暯閳ь剝灏欓惌娆撴煛鐏炵偓绀嬬€规洘鍎奸ˇ鍙夈亜韫囷絽骞橀柍褜鍓氶鏍窗閺囩姴鍨濇繛鍡樺姃缁诲棙鎱ㄥ┑鍡欑劸婵℃彃缍婂娲焻閻愯尪瀚板褜鍨堕幃浠嬵敍閵堝洨鐦堥悗娈垮枛椤兘骞冮姀銈呯闁绘挸娴峰顔尖攽閻橆喖鐏辨繛澶嬬洴閺佸啴濡烽妷銏$亖婵犵數濮电喊宥夊煕閹达附鐓曟繝闈涙椤忣偊鏌h箛娑楁喚闁哄本鐩幃鈺佺暦閸パ€鎷版俊銈囧Х閸嬫盯宕锔哄亼濞村吋娼欓柋鍥ㄧ節闂堟稓澧曟鐐村姍濮婄粯鎷呴崨闈涚秺瀵敻顢楅崒婊呯厯闂佽鍎崇粻宥嗙瑜版帗鍊甸柨婵嗛閺嬬喖鏌i幘璺烘灈妤犵偞鐗曡彁妞ゆ巻鍋撻柍褜鍏欓崐鏇炵幓閸ф绠涙い鎾跺Х椤旀洟姊洪崨濠勬噧妞ゃ儯鍨介、鏃堝醇閻旇渹鎮f繝鐢靛█濞佳囨偋韫囨稒鍎楁繛鍡樻尰閸嬶綁鏌熼鐔风瑨濠德ゅГ缁绘盯宕奸妷褏鏆┑顔硷攻濡炶棄鐣峰⿰鍫濈闁瑰搫绉堕崙瑙勭節閻㈤潧浠滅€殿喖鐖奸幃褔鎮╃拠鑼暫闂佺偨鍎查弸鐓幬i崼銉︾厪闊洢鍎崇壕鍧楁煕濮椻偓娴滃爼寮婚敐鍫㈢杸闁哄洨鍋樼划鑸电節閳封偓閸屾粎鐓撻梺璇″灠閻ジ鍩€椤掑﹦绉甸柛瀣缁粯銈i崘鈺冨幈濡炪倖鍔戦崐鏇㈠几閹达附鐓曞┑鐘插暙婵牓鏌熸笟鍨缂佺粯绻堝畷鐔碱敇閻愭鍋ч梻鍌欒兌閹虫捇宕查弻銉ョ疇闁归偊鍠栭崹婵嬫煟閵忋埄鏆柛瀣崌閺佹劖鎯斿┑鍫濆毈闂備椒绱徊濂稿础閸愬樊娼栫紓浣股戞刊鎾偡濞嗗繐顏╁ù鐘櫊濮婃椽宕ㄦ繝鍐弳濡炪倖鍨甸ˇ顖炴偩閻戣姤鏅搁柣妯垮皺椤︺劑姊洪懖鈹炬嫛闁告挻鑹鹃埢鎾淬偅閸愨斁鎷洪梻鍌氱墛缁嬫挾绮婚悙鐑樼厱濠电姴鍟粈瀣偓瑙勬礃閿曘垽宕洪埀顒併亜閹哄棗浜惧銈庝簻閸熷瓨淇婇崼鏇炲耿婵°倐鍋撴い顐㈡喘濮婅櫣绮欓崸妤娾偓妤冣偓瑙勬处閸撶喖骞嗛崘顕呮晢闁告洦鍏橀幏濠氭⒑缁嬫寧婀伴柣鐔濆洤绀夌€广儱顦伴崐鐢电磼濡や胶鈽夐柟铏姍閹苯鈻庨幘瀵稿幍闁诲海鏁告灙鐞氥儵姊虹粙娆惧剱闁瑰憡鎮傞敐鐐测攽鐎n偄浜楅柟鑹版彧缁辨洟鎯堥崟顖涚厽閹兼番鍊ゅḿ鎰箾閸欏鐏寸€规洩绻濆畷姗€鎳犻浣诡啎闂備礁鎲¢〃鍫ュ磹閿濆鍋勯柛蹇撶毞閹峰綊姊鸿ぐ鎺戜喊闁哥姵鑹鹃埢鏃堝锤濡や讲鎷婚梺绋挎湰閻熝呯玻閺冣偓缁绘稒鎷呴崘鍙夊闁稿顑夐弻娑㈠焺閸愵亖妲堢紓浣哄Х婵炩偓妤犵偞鐗曡彁妞ゆ巻鍋撻柣蹇d邯閺屾稑鈻庤箛鏇狀唹闂侀潧娲ょ€氫即鐛幒妤€骞㈡俊鐐村劤椤ユ岸姊婚崒娆戭槮闁汇倕娲敐鐐村緞閹邦剙鐎梺绉嗗嫷娈旈柡鍕╁劦閺屾洘寰勯崱妯荤彅濡ょ姷鍋戦崹鐑樼┍婵犲洦鍊烽柟缁樺坊閹稿啴姊洪崨濠傜伇妞ゎ偄顦遍幑銏犫攽鐎n偄浠洪梻鍌氱墛閸掆偓闁绘劗鍎ら悡鏇㈡煏婵犲繘妾柕鍥ㄧ箞閺屸剝鎷呴崜鎻掑壎闂佸搫鐫欓崶銊ユ闂侀潧鐗嗛幊宥呪柦椤忓懐绠鹃柨婵嗘噺閹兼劙鏌ㄩ弴銊ょ凹濞e洤锕畷濂稿即閻愯尙鐛╂俊鐐€栭弻銊╁触鐎n噮鏁傞柨鐔哄У閳锋帒霉閿濆懏鍤堢憸鐗堝俯閺佸嫰鏌涘☉娆愮稇缁炬儳缍婇弻娑㈡晜鐠囨彃绠洪悗瑙勬礀瀵墎鎹㈠☉銏犵婵炲棗绻掓禒鐓幬旈悩闈涗杭闁搞劎鍎ょ粚杈ㄧ節閸ヨ埖鏅┑鐘茬仛閸旀洖鈻撻鐘电<闁绘劦鍓氱欢鑼磼婢跺﹦绉虹€殿喖顭烽弫鎰板幢濡搫濡抽梻渚€娼ф蹇曞緤娴犲瑤澶娾攽閸♀晜瀵岄梺闈涚墕缁绘劙銆呴鍕厸濞达絿鐡旈崵娆愩亜閺囶亞鎮奸柟椋庡Т椤斿繘顢欓崗鐓庘偓顖炴⒒娴gǹ顥忛柛瀣浮瀹曟垿宕ㄩ幖顓熸櫅闂佹悶鍎洪崜姘跺煕閹烘嚚褰掓晲閸涱喖鏆堥梺鍝ュ枔閸嬨倝寮婚悢鐓庣濞达綀娅i弳顐︽倵鐟欏嫭绀堝褎顨婇獮鍡涘籍閸埃鍋撻敃鍌氱闁绘劕鐡ㄩ悵銊╂⒒閸屾瑧鍔嶉悗绗涘懏宕查柛宀€鍊涢崶銊ь浄閻庯綆浜濋悗顒勬⒑缁洖澧查柕鍥ㄧ矒閸┾偓妞ゆ帊绀佺粭鎺撱亜椤愶絿绠炴い銏☆殕缁绘繈宕掑鍏兼祮闂傚倸鍊烽悞锕€顪冮崸妤€鍌ㄥù鐘差儍閳ь剙鍟村畷鍗炩枎閹邦剙绨ユ繝鐢靛仦閸垶宕归崷顓犱笉濠电姵纰嶉悡娑橆熆鐠轰警鍎忛柣蹇婃櫊閺屾盯寮幆褍绁┑顔硷龚濞咃絿鍒掑▎蹇婃瀻闁诡垎鍐棊闂傚倷绀佸﹢閬嶅箠閹捐秮娲敇閻戝棗娈ㄦ繝鐢靛У绾板秹寮查弻銉︾厱婵炴垵褰夌花鍏笺亜椤愩垻孝闁宠鍨块幃娆撳矗婢舵ɑ锛侀梻浣告啞濮婄懓煤濠婂嫮鐝堕柡鍥ュ灩缁狀噣鏌ら幁鎺戝姉闁归攱妞藉娲川婵犲嫮鐣甸柣搴㈠嚬閸樺ジ鏁冮姀銈呯妞ゆ柨澧介敍婊堟煟鎼搭垳绉甸柛瀣閹﹢骞橀鐣屽幈闂佸啿鎼崯顐g鏉堫煈娈介柣鎰▕閸庢棃鏌℃担绋挎殻闁糕斁鍋撳銈嗗坊閸嬫挻銇勯弬璺ㄧ闁宠鍨垮畷鍫曞Ψ閵堝洨娉块梻鍌欑閹碱偄煤閵娾晛纾婚柣鎰惈闂傤垱绻涘顔荤凹闁绘挸鍟撮幃褰掑炊椤忓秴娈濋梺鍛婃⒒閸犳挾妲愰幒鎾寸秶闁靛⿵绠戠壕鎶芥倵鐟欏嫭绀冮悽顖涘浮閸┿垺鎯旈妸銉ь吅濠电娀娼уΛ顓㈡倵閺夋垟鏀介柨娑樺娴滃ジ鏌涙繝鍐ㄧ伌鐎规洘绻傞悾婵嬪礋椤愩倗鏋冩繝娈垮枟閵囨盯宕戦幘鎼闁绘劕寮堕ˉ婊堟煟閿濆棛绠炵€规洜鍠栭、鏇㈠Χ韫囨洖绨ラ梻鍌氬€烽懗鍓佸垝椤栫偛绀夋繛鍡楃箘缂傛氨鎲歌箛鏇炲灊濠电姴娲﹂弲婵嬫煕鐏炲墽銆掗柛妯兼暬濮婅櫣绮欑捄銊ь啈闂佺ǹ顑嗛崝娆忣嚕閸愬樊娼ㄩ柍褜鍓熷璇测槈閵忕姵顥濋柣鐘充航閸斿酣宕濋鐐粹拺閻犲洠鈧櫕鐏撻梺绋款儍閸婃洟鎮鹃悿顖樹汗闁圭儤绻冮弲婵嬫⒑缂佹〒瑙勭椤掑嫭鍎庨幖娣妽閳锋帒霉閿濆懏鍟為悹鎰剁節閺屾稒鎯斿☉妯峰亾濠靛棛鏆︾憸鐗堝笚閸嬨劑鏌涢幘鍐茬骇闁哄懏绮撳娲礃閸欏鍎撻梺鐟板暱缁绘ê鐣烽幇鏉垮瀭妞ゆ劧绲藉鍨攽椤旂瓔娈旀俊顐n殕閺呭墎绱掑Ο鍦畾闂佸湱绮敮鐐电矓濞差亝鐓涢悘鐐靛亾缁€瀣偓瑙勬礃閸庡ジ藝閸欏浜滈煫鍥风到楠炴﹢鏌嶈閸撴岸顢欓弽顓炵獥闁哄洨濮撮崹婵囩箾閸℃ê濮冪紒璇叉閹便劌鈹戦崱娆戝姼濠碘剝褰冮妶绋款潖濞差亝顥堥柍鍝勫暟閵堢兘姊虹粙鍧楊€楃痪缁㈠幖鍗遍柟鐗堟緲缁犲鎮楀☉娅亪顢撻幘鍓佺=濞达絽婀遍埥澶嬨亜閹存繃鍣归柍缁樻崌椤㈡﹢鎮欓埡鍌涙澑闂備礁鐤囧Λ鍕涘Δ浣侯洸婵犻潧鐗忕壕濂告偣閸ヮ亜鐨哄褎娲橀妵鍕即椤忓棛蓱缂備胶绮换鍌烇綖濠靛鏁囬柣鎰閻╁海绱撻崒娆掑厡闁稿鎸婚崚濠囨嚍閵夛絼绮撻梺褰掓?缁€渚€鎮挎ィ鍐╃叆婵犻潧妫Σ褰掓煕鐎Q冨⒉缂佺粯绻冪换婵嬪磼濮橆厽顔嶉梺杞扮閻楁挸顫忛搹瑙勫珰闁炽儴娅曢悘宥夋⒑閹稿孩纾搁柛銊ょ矙閻涱喗绻濋崶銊ヤ汗濠电偠灏欑划顖炲疾閵忋倖鈷戠紒瀣濠€鎵磼椤曞棛鎮兼俊鍙夊姍瀵濡烽敂瑙勫闂備礁鎲$换鍌溾偓姘槻鍗遍柟闂寸劍閻撶喐淇婇妶鍌氫壕闁诲孩纰嶅姗€鎮惧畡鎵虫斀闁搞儯鍔岄崝鍛存⒑閹稿海绠撴繛璇х悼缁厽寰勯幇顓涙嫼缂傚倷鐒﹂敋濠殿喖顦甸弻娑欐償濞戞ǚ鍋撳┑瀣畺闁炽儲鏋煎Σ鍫ユ煏韫囧ň鍋撻弬銉ヤ壕闁割偅娲橀悡鐔兼煙闁箑鐏$痪顓炲⒔閹喖顫濋懜纰樻嫼闂佸憡绺块崕杈ㄧ墡闂備焦瀵уú蹇涘垂閽樺鍤曞┑鐘宠壘閻掓椽鏌涢幇銊︽珔妞ゅ孩鎹囧娲嚒閵堝懏鐎惧┑鐘灪閿曘垽鏁愰悙鍝勭婵°倓绀侀埀顒傛暬閹嘲鈻庤箛鎿冧痪缂備讲鍋撻柛顐犲劜閻撴洟鏌eΟ铏癸紞濠⒀呮暬閺屾洟宕遍弴鐙€妲銈庡亝缁捇宕洪埀顒併亜閹烘垵顏╃紒鐘崇墵閺屽秹宕崟顒€娅ら梺璇″灣閸嬬偤濡甸崟顖氱疀闁宠桨璁查崑鎾斥攽鐎n亞顔嗘繝鐢靛У绾板秹鍩涢幒妤佺厱閻忕偞宕樻竟姗€鏌嶈閸撴瑩宕查弻銉︾畳闂備焦鎮堕崕婊堝川椤旂瓔鍟庨梻鍌欑婢瑰﹪鎮¢崼銉ョ;闁告稒娼欓惌妤呯叓閸ャ劎鈯曢柣鎾寸懇閺岀喖顢涘☉娆戝嚒閻炴碍宀稿娲箮閼恒儲鏆犲┑顔硷工椤兘宕洪埀顒併亜閹哄棗浜剧紓浣哄Т缁夌懓鐣烽弴銏$劶鐎规挶鍎卞ú顓€€佸☉銏″€烽柟缁樺笧閳ь剦鍙冨铏圭矙鐠恒劎浼囬梺绋款儑閸嬨倝骞冮敓鐘差潊闁炽儴灏欑粻姘渻閵堝棛澧紒顔肩焸閹啴骞嬮悩鐢碉紲闁哄鐗勯崝宀勫传濞差亝鐓涢悘鐐额嚙婵″ジ鏌嶇憴鍕伌鐎规洟浜堕崺锟犲磼閸岋箑顩紒杈ㄦ尰閹峰懘骞撻幒宥咁棜闂備浇顕ч崙鐣岀礊閸℃稑纾诲ù锝呮贡椤╁弶绻濇繝鍌滃闁绘挻绋撻埀顒€绠嶉崕閬嶅疮椤愶絼绻嗛柛褎顨嗛悡鍐煢濡警妯堟俊鎻掓贡缁辨帞绱掑Ο鍏煎垱閻庤娲栭妶鎼佸箖閵忋倖鎯為柛锔诲幖鐢劌鈹戦悩鎰佸晱闁哥姵鐗犻弫鍐Ω閵夈垺鐎洪梺鎸庣箓閹冲危閸儲鐓熼柕蹇婃嚉閻熼偊鍟呮繝闈涙储娴滄粓鏌¢崒娑樺姢閻庢艾閰i弻宥堫檨闁告挻宀稿畷婵嬪即閳垛斁鍋撻弮鍫濈妞ゆ柨妲堣楠炴牜鍒掗崗澶婁壕闁肩⒈鍓欓崵顒€鈹戦悩鍨毄闁稿濮锋禍绋库枎閹惧磭鐛ラ梺鍝勮癁閸涱喗顔曟繝鐢靛仜濡﹥绂嶅⿰鍫熷€块柛顭戝亖娴滄粓鏌熼崫鍕ф俊鎯у槻闇夋繝濠傚閻帡鏌″畝鈧崰鏍х暦椤愶箑绀嬫い鎺戭槹椤ワ絽鈹戦悙鑼憼缂侇喗鎸剧划濠氬冀瑜滃ḿ鏍ㄧ箾瀹割喕绨荤紒鐘卞嵆楠炴牕菐椤掆偓閻忣噣鏌嶇憴鍕姇缂佺粯绻勯崰濠偽熷畡棰佸闂佹儳娴氶崑鍛村箖濞嗘挻鐓曟俊銈呮噸閹查箖鏌″畝鈧崰鏍箖瑜斿畷濂告偄閸濆嫬娈ョ紓鍌氬€风欢锟犲磻閸曨厾鐭撶憸鐗堝笒閽冪喐绻涢幋娆忕労闁轰礁鍟撮弻銊モ攽閸℃ê绐涢梺浼欑悼閸樠団€旈崘顔嘉ч柛鈩兠棄宥呪攽閿涘嫬浠╂俊顐㈠閿濈偠绠涘☉娆愬劒闂侀潻瀵岄崢楣冩晬濠婂啠鏀介柍钘夋閻忕娀鏌熺喊鍗炰喊闁挎繄鍋涢悾婵嬪礋椤掆偓閳ь剙鐏氱换娑㈠醇濠靛牅铏庡┑鐐叉噺閿曘垽寮诲☉銏犵閻庨潧鎲¢崳顖炴⒑鐠囪尙绠伴柛鐔告綑椤繐煤椤忓嫬绐涙繝鐢靛С閼冲墎鎹㈡笟鈧娲传閵夈儛锝団偓鍏夊亾缂佸娉曢弳锕傛煏韫囧鈧洜绮婚悷鎳婂綊鏁愰崨顓炶緟闂佸綊鏀卞钘夘潖濞差亜宸濆┑鐘插暙闂夊秹鎮峰⿰鍕凡闁哥噥鍨崇划瀣吋閸℃瑯娴勯柣搴秵閸嬪棝宕㈤柆宥嗙厽閹兼惌鍨崇粔闈浢瑰⿰鍕煉妞ゃ垺妫冮、姗€濮€閿涘嫬骞嶆俊鐐€栧褰掑几婵犳碍鍤€闁秆勵殕閻撴稑霉閿濆毥褰掑汲閿濆洠鍋撶憴鍕閻㈩垱甯¢崺銉﹀緞婵犲孩鍍靛銈嗗坊閸嬫挾绱掗悩闈涗槐婵﹦绮幏鍛驳鐎n亝顔勯梻浣告啞閸ㄥ綊寮查銈嗩潟闁绘劕鎼獮銏$箾閹寸偍缂氶柨娑欑洴濮婅櫣鍖栭弴鐐测拤闁藉啳椴哥换娑㈠川椤栨锝夋煏閸パ冾伃妤犵偞甯¢獮瀣攽閸愩劋澹曢梺鐓庮潟閸婃洟藟濮橆兘鏀介柛灞剧閸熺偤鏌i幘瀛樼闁诡喗锕㈤幃娆撳箵閹哄棙瀵栭梻浣哥枃濡嫰藝鏉堚晜顫曢柟鐑樺焾濞撳鏌ㄩ弴妤€浜惧┑鐐额嚋缁犳捇骞冮垾鏂ユ瀻闁规儳顕崢浠嬫⒑缂佹ɑ鐓ラ柟璇х磿濞嗐垽宕f径鍫滅盎闂婎偄娴勭徊钘夘嚕椤曗偓閺屸€崇暆閳ь剟宕伴弽顓炵畺闁斥晛鍟崕鐔兼煏韫囥儳鎮兼い銏犳嚇濮婄粯鎷呴悜妯烘畬閻庢鍠栭悥濂哥嵁閹版澘绀冮柤纰卞墯濞堥箖姊虹紒妯荤叆闁告艾顑夎棢闁割偆鍠撶粻楣冩煙鐎电ǹ浠ч柟鍐插閺岋絽鈹戦幘鍓佺槇濠殿喖锕ら…宄扮暦閹烘埈娼╂い鎴f娴滈箖鏌熼梻瀵割槮缁惧墽鎳撻—鍐偓锝庝簼閹癸綁鏌i鐐搭棞闁靛棙甯掗~婵嬫晲閸涱剙顥氬┑掳鍊楁慨鐑藉磻閻愮儤鍋嬮柣妯荤湽閳ь兛绶氬鎾閻樻爠鍥ㄧ厱閻忕偛澧介悡顖氼熆鐟欏嫭绀€闁宠鍨块、娆撴儗椤愵偂绨婚柣锝囧厴椤㈡宕熼銏犱憾闂佽娴烽弫鍝ユ兜閸洖纾婚柟鎹愬煐閸犲棝鏌涢弴銊ュ妞わ负鍎崇槐鎾诲磼濮樻瘷銏ゆ煥閺囥劋绨绘い鏇稻缁绘繂顫濋鈧懓鍨攽鎺抽崐鏇㈡晝閵堝绠栭柟杈鹃檮閳锋垿鏌涘☉姗堟缂佸爼浜堕弻娑㈠Ω瑜庡▍鏇熶繆閸欏濮嶉柡灞芥椤撳ジ宕卞▎蹇撶闂備胶顢婃竟鍫ュ箵椤忓棙顫曢柡鍥ュ灪閸嬧晜銇勯幘鍗炵仾闁绘挻娲熼獮鏍庨鈧俊娲煙閺屻儳鐣洪柟绋匡工閳规垿宕伴姀鐘电Ш鐎规洘顨婂畷妤呮嚃閳哄啠鏋忕紓鍌欒兌閸嬫挸鐣峰Ο琛℃灃闁哄洢鍨归悞鍨亜閹哄棗浜剧紓浣哄Т缁夌懓鐣烽弴銏$劶鐎规挶鍎卞ú锔锯偓浣冨亹閳ь剚绋掗敋濞存粍顨婂娲传閸曨剙鍋嶉梺鎼炲妽濡炰粙骞冮垾鏂ユ闁靛骏绱曢崢閬嶆⒑闂堟侗妾х紒韫矙瀹曟繂顫濋鑺ユ杸闂佹寧绋戠€氼剛鏁懜鐐逛簻妞ゆ挴鈧啿濮峰銇卞倻绐旈柡灞剧洴婵℃悂濡堕崨顓犮偖婵犵數濮崑鎾炽€掑锝呬壕濠殿喖锕ㄥ▍锝囨閹烘嚦鐔煎箻閾忣偉纭€缂備緡鍠楀Λ鍐€佸璺虹劦妞ゆ帒瀚ㄩ埀顑跨窔瀵噣宕煎┑瀣暪闂備胶绮Λ浣糕枍閿濆姹查柕蹇嬪€栭埛鎺楁煕鐏炴崘澹橀柍褜鍓涢崗姗€骞冮悙鐑樻櫆闂佹鍨版禍鍓х磼濡や胶鈽夐柟鍐茬箰閻g兘寮婚妷锔惧幈闁诲繒鍋熼搹搴ㄥ吹閵堝棛绠鹃柟瀵稿剱閻掓悂鏌¢崘銊у鐎瑰憡绻冮妵鍕箻鐠虹洅銏☆殽閻愭潙娴慨濠勭帛閹峰懘宕ㄦ繝鍐ㄥ壍婵犵數鍋涢惇浼村垂閽樺鏆﹂柣鐔稿櫞濞差亶鏁傞柛娑卞幒缁ㄧ敻姊绘担鍛婂暈闁告棑闄勭粋宥呪攽鐎n亞鐛ラ梺褰掑亰閸樺墽寮ч埀顒佺節閻㈤潧孝闁稿﹦绮弲鍫曞即閻樼數锛滈梺閫炲苯澧寸€规洖銈搁幃銏㈢矙閸喕绱熷┑鐘殿暯濡插懘宕规潏鈹惧亾缁楁稑鎳忛崗婊兾旈敐鍛殲闁绘挶鍨介弻娑㈠箛閸忓摜鐩庨梺鍝勵儐閻╊垶寮婚敍鍕勃闁绘劦鍓涢ˇ銊х磽娴h櫣甯涚紒瀣墵钘濋柡灞诲劜閸婂灚鎱ㄥΟ鍝勮埞闁告ê顕埀顒冾潐濞叉﹢宕归幐搴濈箚闁归棿绀侀悡娑㈡煕鐏炵虎娈曢悗姘冲亹缁辨捇宕掑顑藉亾閻戣姤鍊块柨鏇炲€归弲顏勨攽閻樻剚鍟忛柛鐘崇墪鐓ら柨鏇炲€告闂佸憡娲﹂崹浼村础閹惰姤鐓忓┑鐐茬仢閸旀氨绱掗銏⑿ф慨濠呮閸栨牠寮撮悢鍛婄翻闂備焦鎮堕崝蹇撐涢崟顖f晪闁挎繂顦粻缁樸亜閺冨倵鎷℃繛鐓庯躬濮婃椽鎮欓挊澶婂闂佸搫顑呴妶绋跨暦閹达箑绠荤紓浣姑禒娲⒑閸涘﹦鈽夐柨鏇畵瀹曪綁宕卞缁樻杸闂佺粯岣跨划顖氣槈瑜庢穱濠囶敃閿濆孩鐤侀梺绯曟杹閸嬫挸顪冮妶鍡楃瑨闁稿﹤缍婂畷鐢稿焵椤掑嫭鈷戦悗鍦閸ゆ瑧绱掓径灞惧殌闁伙絿鍏樺畷濂稿即閻愬秮鏅犻弻銊モ攽閸℃浼€闂佺儵鏅涢柊锝咁潖缂佹ḿ绡€閹肩补鈧尙鐩庢繝鐢靛仩椤曟粍淇婇崶鈺佸灊婵炲棙鎸哥粻娑㈡煛婢跺孩纭堕柣銈呮噺娣囧﹪濡惰箛鏇炲煂闂佸摜鍣ラ崹鍫曞箖閳ユ枼妲堥柕蹇娾偓鏂ュ亾閸洘鐓熼柟鎵濞懷兠瑰⿰鍐ㄢ挃缂佽鲸甯¢崺鈧い鎺戝€甸崑鎾绘晲鎼粹€冲箣闂佺ǹ顑嗛幐楣冨箟閹绢喖绀嬫い鎺戝亞濡茬懓鈹戦悙鑼憼缂侇喖鐭傞幃銉︾附缁嬭銉ッ归敐鍛棌婵炵鍔戦弻宥堫檨闁告挾鍠栭悰顕€宕橀纰辨綂闂佹寧绋戠€氭澘顬婇鐣岀瘈闁靛骏绲剧涵鐐亜閿曚線鍝虹€垫澘瀚伴弫鎾绘晸閿燂拷

    重磅专题
    往期文章
    最新文章