cursor_sharing='SIMILAR'将被废弃

根据metalink文档<ANNOUNCEMENT: Deprecating the cursor_sharing = ‘SIMILAR’ setting [ID 1169017.1]>在11g中将逐渐废弃cursor_sharing参数的SIMILAR选项,原因是在今后的版本中Exact和Force选项可以满足游标共享的需求了,使用SIMILAR选项可能引发额外的version_count过多或cursor pin s on X等待事件。
We recommend that customers discontinue setting cursor_sharing = SIMILAR due to the many problematic situations customers have experienced using it. The ability to set this will be removed in version 12 of the Oracle Database (the settings of EXACT and FORCE will remain available). Instead, we recommend the use of Adaptive Cursor Sharing in 11g. A number of customers have seen an increase in the number of child cursors since migrating to Oracle Database 11g Release 2. This can lead to many problems including complete CPU saturation of a machine requiring a database instance bounce or general database performance issues in the form of waits on mutexes and 'library cache lock'. From Oracle versions 9.0 through 11.1, an oracle instance would limit the number child cursors in the shared pool associated with a single parent to 1024 before it would mark the parent OBSOLETE effectively invalidating it and all the children. Then a new parent with one child would be created and used going forward. But this would only limit the degradation of performance for some environments rather than fix something that could be addressed more effectively through improved application coding. (The attempt to address this from the database side also introduced other issues like bug 5177766). The child limit was removed by Oracle development because it was only masking an application problem at the expense of database performance for better designed applications. In addition, the obsolete code would not work in cases when SQL was wrapped within PL/SQL. The fundamental problem that obsolete code was masking is application code that was written incorrectly with regards to the ability to be shared. For example,  it is not written with user binds or the literal characteristics differ to a high degree. Therefore, setting cursor_sharing = SIMILAR is highly discouraged in Oracle Database 11g Release 2 (and generally has not been recommended for most environments even in earlier versions) for several reasons: 1) This parameter is generally overly restrictive in what it actually allows to be shared. SIMILAR tells oracle to try and share cursors by replacing all literals with binds for legacy applications, but directs that sharing only be performed when all the replaced literal values were exactly the same (in the case of predicates referencing columns with histograms or using inequality operators such as BETWEEN, <, and !=) 2) This parameter seems to bypass a lot of the improvements made with Oracle Database 11g’s Adaptive Cursor Sharing feature and other abilities in the Cost Based Optimizer code to make better decisions on what execution plans should and should not be shared. 3) Having many child cursors all associated with 1 parent cursor could perform much worse than having many parent cursors that would be seen with having the default setting of cursor_sharing = EXACT (or FORCE). The scenario of many thousands of child cursors associated with 1 parent results in a potential bottleneck for searches for matching cursors (soft parsing) within the library cache. The cursor_sharing parameter was introduced as a workaround for legacy applications that could not scale because they had not yet been redesigned to use bind variables. It has been presumed that most applications have been redesigned since then. If you are still using such an application, our recommendation is to set cursor_sharing = FORCE. This setting maximizes cursor sharing while leveraging the Adaptive Cursor Sharing framework to generate multiple execution plans based on different literal value ranges if necessary. What do you need to do? Change the cursor_sharing to either FORCE or EXACT, keeping in mind the effects of either. this is due to the setting in the init.ora: cursor_sharing=SIMILAR Please set immediately alter system set cursor_sharing='FORCE' scope=both; to reduce the number of versions for a single sql statement whic is overloading your shared_pool. 377847.1 for SIMILA not FORCE are not the same When bind variables are peeked. The parse engine makes a decision as to the 'safety' of these peeked values for creating plans based upon whether it is felt that different values could produce different plans. The usual (but not the only) reason for such different plans is the use of CURSOR_SHARING=SIMILAR and the presence of histogram column statistics on the column that the bind is being compared with when using the Cost Based Optimizer (CBO). If there are histograms on the column, then the bind value may be deemed to be 'unsafe' because there is the potential chance that the different values could produce a different explain plan and the selection of a single plan for all values may not be 'safe' in terms of performance. If the bind is deemed 'unsafe' then multiple children are created for each set of different bound values so that different plans can be associated with them. This occurs in a few scenarios but the most common is with histogram stats on an equality predicate. CURSOR_SHARING=SIMILAR With CURSOR_SHARING=SIMILAR whenever the optimizer looks at a replaced bind value to make a decision then that bind is checked to see if it should be considered unsafe. The check made is : Is the operator NEITHER of   '=' or '!=' OR Are there Column Histograms present on the column. If either of these are true then the bind is deemed to be unsafe and a new cursor will be created (So binds used in non equality predicates (eg >, <, >=, <=, LIKE) are unsafe). To check for whether a bind is considered unsafe see: Note:261020.1 High Version Count with CURSOR_SHARING = SIMILAR or FORCE With histogram stats on an equality predicate, this can cause severe problems (in terms of sharing) if there is, for example, a histogram on a main key column.eg: select ... from orders where orderid='literal'; If  there is a histogram on "orderid" then the bind will likely get marked unsafe and a new child will be produced for every single value of 'literal'. The SQL would only be shared if the value of 'literal' matches exactly to a value used already. Remember that if literals are converted to binds due to CURSOR_SHARING then they are subject to this checking, though unsafe binds are really only an issue if CURSOR_SHARING is SIMILAR. In an OLTP type environment it would be sensible to only use histogram statistics on columns that need it (i.e. where there are only a few distinct values with heavy skew and where different plans are needed for different predicate values). This way most SQL is shared and the absence of histograms keeps predicates safe except where needed. CURSOR_SHARING = FORCE If CURSOR_SHARING = FORCE binds can still be "unsafe" (in terms of performance) if used by the optimizer in decisions but this should not then affect shareability of the SQL since CURSOR_SHARING=FORCE does not care about unsafe literals, but the cursor should stil lbe shared. e.g.: In the above example with orderid='literal', without histograms, the CBO does not need to look at 'literal' to determine the selectivity of the predicate and so the bind does not get marked unsafe. If there is histograms, the predicate is marked as unsafe, but since FORCE uses the same plan whatever the circumstance, this does not matter. Only where non data literals for whom different values alter the actual meaning of the SQL (e.g. order by 1 versus order by 2) will an unsafe predicate have an affect on plans. Note that, prior to 11g, unsafe literals are NOT covered by 'bind mismatch' in V$SQL_SHARED_CURSOR  as this is for user bind metadata mismatches. ie: different max bind lengths or bind type mismatches. In 11g R2 (and 11.1.0.7 Patchset) a new column has been added to V$SQL_SHARED_CURSOR to check if literal replacement is used with CURSOR_SHARING=SIMILAR. The new column HASH_MATCH_FAILED  is set to "Y" if sharing fails due to a hash mismatch, such as the case with mismatched histogram data or a range predicate marked as unsafe by literal replacement. The unshared child cursors may have histogram data on key columns used in equality predicates, or range predicates with literals which the optimizer has marked as unsafe. From the optimizer point of view, these additional plans for 'unsafe' bind variables explain why multiple good plans may occur for peeked bind variables, even though the standard behavior for binds is to use peeked binds for the initial parse and then use the resultant plan for all other iterations. With unsafe binds, different plans for different peeked values can occur. Background Information This issue has been coming more in to focus with dynamic sampling in 10.2 since the default was changed from 1 to 2. When optimizer_dynamic_sampling is greater than 1 then Dynamic sampling emulates statistics + histograms. If histograms are created, then binds may be marked as unsafe and produce different plans for different values. With optimizer_dynamic_sampling > 1 a predicate can create a new version of a sql statement for each different value, even if there are no histograms (or even statistics) on a table (since dynamic sampling may create these in the background).  
在11g中Oracle官方已经不再推荐使用SIMILAR选项,对于已经升级到11g的仍在使用cursor_sharing='SIMILAR'的用户,建议尽早修改应用做到绑定变量,这样可以最稳妥的将cusror_sharing设置为EXACT,对于无法做到绑定变量的应用那么FORCE还会是一个和好的折中选择。 在版本12g中我们将不再看到SIMILAR选项。   Note #1: Forcing cursor sharing among similar (but not identical) statements can have unexpected results in some DSS applications and in applications using stored outlines. Note #2: Setting CURSOR_SHARING to FORCE causes an increase in the maximum lengths (as returned by DESCRIBE) of any selected expressions that contain literals (in a SELECT statement). However, the actual length of the data returned will not change. Cursor_sharing 相关的BUG 列表:  
NBBugFixedDescription
1445612412.1.0.0Predicate push may not occur with cursor sharing
1405345711.2.0.4, 12.1.0.0ORA-917 parsing SQL with indicator binds with CURSOR_SHARING
1272329511.2.0.4, 12.1.0.0ORA-600 [qerixGetKey:optdesc] with function based index and CURSOR_SHARING
987796011.2.0.4, 12.1.0.0ORA-600 or similar using CURSOR_SHARING with HS connections
1408791412.1.0.0Wrong results from ExistsNode with CURSOR_SHARING
+1355018511.2.0.2.BP17, 11.2.0.3.4, 11.2.0.3.BP06, 12.1.0.0Hang / SGA memory corruption / ORA-7445 [kglic0] when using multiple shared pool subpools
1302385411.2.0.4, 12.1.0.0Long parse time / hang for SQL with nested CASE expressions with CURSOR_SHARING enabled
1286217012.1.0.0INSERT ALL fails with ORA-600[kkslhsh1] with CURSOR_SHARING enabled / High Version Count on HASH_MATCH_FAILED
1279742011.2.0.3.3, 11.2.0.3.BP07, 12.1.0.0"library cache: mutex X" waits on DB instance handle with CURSOR_SHARING
1264944211.2.0.2.8, 11.2.0.2.BP18, 11.2.0.3, 12.1.0.0ORA-7445 [kxscod] with CURSOR_SHARING=FORCE or SIMILAR
1259644411.2.0.2.7, 11.2.0.2.BP17, 11.2.0.3.BP08, 12.1.0.0Cursor not shared with CURSOR_SHARING if SQL has a CASE expression or set operation (UNION)
1253459712.1.0.0Bind Peeking is disabled for remote queries
1237421211.2.0.2.8, 11.2.0.2.BP18, 11.2.0.3, 12.1.0.0Assorted dump , internal errors, memory corruptions with cursor_sharing = force
1234598011.2.0.3, 12.1.0.0high parse time with cursor_sharing=force when session_cached_cursors set
1233428611.2.0.3, 12.1.0.0High version counts with CURSOR_SHARING=FORCE (BIND_MISMATCH and INCOMP_LTRL_MISMATCH)
1185802111.2.0.3, 12.1.0.0ORA-600 [kpoal8-1] using DG4DRDA with CURSOR_SHARING=force
1180696111.2.0.3, 12.1.0.0ORA-600 [kkspsc0: basehd] using CURSOR_SHARING
1173825911.2.0.2.7, 11.2.0.2.BP17, 11.2.0.3, 12.1.0.0ORA-600 [kghssgfr2] using CURSOR_SHARING=FORCE
1171415911.2.0.3, 12.1.0.0ORA-917 occurs with CURSOR_SHARING even if patch:9877980 is applied - superseded
1107603011.2.0.3, 12.1.0.0Wrong results for XDB when CURSOR_SHARING enabled
1106919911.2.0.2.2, 11.2.0.2.BP06, 11.2.0.3, 12.1.0.0ORA-600 [kksObsoleteCursor:invalid stub] with CURSOR_SHARING = SIMILAR | FORCE if fix 10187168 present
1106319111.2.0.2.7, 11.2.0.2.BP17, 11.2.0.3.2, 11.2.0.3.BP04, 12.1.0.0ORA-4031 with hint /*+ CURSOR_SHARING_EXACT */ - excessive "KKSSP^nn" memory
1012609411.2.0.2.3, 11.2.0.2.BP08, 11.2.0.3, 12.1.0.0ORA-600 [kglLockOwnersListAppend-ovf] from literal replacement on SQL issued from PLSQL
1001317011.2.0.3, 12.1.0.0ORA-600 [736] from literal replacement with a "WAIT n" clause
*987798011.2.0.2.8, 11.2.0.2.BP18, 11.2.0.3, 12.1.0.0ORA-7445[kkslMarkLiteralBinds] / Assorted Errors on 11.2.0.2 if cursor sharing is enabled - Affects RMAN
987796411.2.0.3, 12.1.0.0ORA-600 [19003] raised by LIKE :BIND in query
968043011.2.0.3, 12.1.0.0High version count with CURSOR_SHARING = FORCE due to CBO transformation
954810411.2.0.2, 12.1.0.0OERI [qcsfbdnp:1] instead of ORA-1788 with cursor sharing
941396211.2.0.2, 12.1.0.0Many child cursors / ORA-600 [opixrb-3.0] [2005] [ORA-02005] binding literal for remote RPI
941149611.2.0.2, 12.1.0.0ORA-979 on GROUP BY query with CURSOR_SHARING set
936221811.2.0.2, 12.1.0.0Literals replaced by binds when CURSOR_SHARING=EXACT
934840212.1.0.0OERI [kks-hash-collision] can occur with CURSOR_SHARING=FORCE|SIMILAR
922358611.2.0.2, 12.1.0.0Problems with variable length NCHAR literals with cursor sharing
903118311.2.0.2, 12.1.0.0ORA-1722 with CURSOR_SHARING=SIMILAR and with NCHAR
900890411.2.0.2, 12.1.0.0Dump (audTransFro) with CURSOR_SHARING
891372911.2.0.2, 12.1.0.0ORA-979 with CURSOR_SHARING=SIMILAR or FORCE
854537711.2.0.2, 12.1.0.0ORA-1780 with CURSOR_SHARING on XML queries
824644511.2.0.2, 12.1.0.0Query rewrite not working for multi-MV rewrite with literal replacement
575186611.2.0.2Wrong Results with CASE and CURSOR_SHARING
976767410.2.0.5.5Dump [kkslmtl] using CURSOR_SHARING - superceded
879469311.2.0.2Dump [kkscsmtl] using literal replacement (CURSOR_SHARING)
849139911.2.0.1Adaptive Cursor Sharing does not match the correct cursor version for queries using CHAR datatype
845324511.2.0.1Many child cursors with CURSOR_SHARING = FORCE
826464211.2.0.1ORA-600 [kkexbindopn0] with CURSOR_SHARING = SIMILAR
765109211.2.0.1ORA-1000 with Literal Replacement, EXECUTE IMMEDIATE and CURSOR_SHARING_EXACT hint (affects DBMS_STATS)
751686710.2.0.5, 11.1.0.7.1, 11.2.0.1Intermittent Wrong results from literal replacement with fix for bug 6163785
727229710.2.0.4.1, 10.2.0.5, 11.1.0.7, 11.2.0.1Memory corruption / OERI[17114] / OERI[17125] with literal replacement
721212011.1.0.7, 11.2.0.1Session cursor cache not used properly when CURSOR_SHARING=force/similar
633771610.2.0.5, 11.1.0.7, 11.2.0.1Wrong max column size for NULL strings with literal replacement
575710610.2.0.4, 11.1.0.7, 11.2.0.1OERI[15851] selecting aggregate of a constant with literal replacement
407151910.2.0.5, 11.1.0.7, 11.2.0.1GROUP BY query with CURSOR_SHARING fails with ORA-1802
346125111.1.0.7, 11.2.0.1V$SQL_SHARED_CURSOR shows all N with CURSOR_SHARING
729625810.2.0.5, 11.1.0.7.1Intermittent Wrong results from literal replacement and remote objects
616378510.2.0.5, 11.1.0.7Intermittent Wrong Results with dblink and cursor_sharing
8202234Intermittent Wrong Results with dblink and cursor_sharing
586327710.2.0.4, 11.1.0.6ORA-1008 from SQL on second run when cursor_sharing=similar/force
576275010.2.0.4, 11.1.0.6ORA-907 when cursor_sharing is enabled
547650710.2.0.4, 11.1.0.6OERI[15868] / OERI[15160] can occur with cursor sharing
536481910.2.0.4, 11.1.0.6OERI[kkslpbp:1] when using literal replacement
525475910.2.0.4, 11.1.0.6ORA-12801/ORA-1008 occurs on a parallel query with bind variables
517776610.2.0.4, 11.1.0.6OERI[17059] with SESSION_CACHED_CURSORS
515588510.2.0.4, 11.1.0.6OERI[kkslgbv0] with CURSOR_SHARING=similar
+514674010.2.0.4, 11.1.0.6Wrong results with bind variables/CURSOR_SHARING
508217810.2.0.4, 11.1.0.6Bind peeking may occur when it should not
505517510.2.0.3, 11.1.0.6Dump [kkslpkp] using literal replacement with timezone literals - superceded
486772410.2.0.5, 11.1.0.6Literal replacement limits column names to 30 characters
469815610.2.0.3, 11.1.0.6ORA-12850 querying GV$ views when CURSOR_SHARING=FORCE
46074609.2.0.8, 10.2.0.3, 11.1.0.6Dump [opipls] when CURSOR_SHARING = SIMILAR | FORCE
451369510.2.0.4, 11.1.0.6Poor performance for SELECT with ROWNUM=1 with literal replacement
44582269.2.0.8, 10.1.0.5, 10.2.0.2, 11.1.0.6High version count with cursor_sharing=force
445664610.2.0.2, 11.1.0.6Dump (kxscod/memcmp) using literal replacement
44518819.2.0.8, 10.2.0.2, 11.1.0.6OERI[kkslhsh1] from Insert as SELECT
443683210.2.0.4, 11.1.0.6False ORA-979 "not a group by expression" with literal replacement
435936710.1.0.5, 10.2.0.2, 11.1.0.6High version_count with cursor sharing
425409410.2.0.3, 11.1.0.6OERI[qerrmObnd1][932] possible for queries over DB links
420250310.2.0.4, 11.1.0.6Parse errors possible using CONTAINS with cursor_sharing=similar/force
420054110.2.0.3, 11.1.0.6Parse error when CURSOR_SHARING=FORCE|SIMILAR with user binds
38808819.2.0.8, 10.2.0.2, 11.1.0.6Dump (kkslMarkLiteralBinds) using cursor sharing
283758010.2.0.4, 11.1.0.6Dump if SQL has > ~35000 literals
1334966510.2.0.5.6ORA-600 [kkslmtl-valnotfound] with fix for bug 9767674 (eg After applying PSU 10.2.0.5.5)
39806739.2.0.8, 10.1.0.5, 10.2.0.1Literal replacement may dump (kkslpbp) if user binds have names like SYS_B_xx
38422539.2.0.7, 10.1.0.4, 10.2.0.1Dump (kgghash) using literal replacement
38198349.2.0.7, 10.1.0.4, 10.2.0.1Dump (kkslflb) with literal replacement
38185419.2.0.7, 10.1.0.4, 10.2.0.1CURSOR_SHARING=force does not work if SQL has an NVL or DECODE predicate
373795510.1.0.4, 10.2.0.1, 9.2.0.7Long parse times for long inlists / many AND/OR terms
36685729.2.0.6, 10.1.0.4, 10.2.0.1ORA-979 when CURSOR_SHARING = force|similar with inline view and GROUP BY
364569410.1.0.5, 10.2.0.1Poor plan from SQL with literal replacement and LIKE .. ESCAPE ..
34069779.2.0.6, 10.1.0.3, 10.2.0.1High version count in V$SQL due to binds marked as non-data with CURSOR_SHARING=FORCE
31488309.2.0.6, 10.1.0.3, 10.2.0.1Select over database link fails with OERI[opixmp-7] if CURSOR_SHARING=similar
31283639.2.0.6, 10.1.0.4OCIAttrGet returns wrong size when CURSOR_SHARING=SIMILAR or FORCE
30075749.2.0.5OERI:15212 using CURSOR_SHARING=FORCE with database links
5526018Dump [kkslpbp] / OERI[kkslpbp:1] with materialized view and literal replacement
31320719.2.0.6, 10.1.0.2Wrong results possible with CURSOR_SHARING=FORCE|SIMILAR
30456239.2.0.5, 10.1.0.2OERI[kkslhsh1] possible with CURSOR_SHARING=FORCE
29580969.2.0.5, 10.1.0.2Using XMLType / objects over DBLINKS with CURSOR_SHARING may dump
28436019.2.0.5, 10.1.0.2DML across a dblink fails with ORA-24370 if cursor_sharing is enabled
26435799.2.0.4, 10.1.0.2ORA-7445 [kxspoac] using CURSOR_SHARING=FORCE (or similar)
26205419.2.0.5, 10.1.0.2ORA-7445 [KXSPOAC] can occur on DML using CURSOR_SHARING
25087029.2.0.3, 10.1.0.2ORA-7445 [KKSLHIB] with CURSOR_SHARING=FORCE with INTO clause
24741929.2.0.3, 10.1.0.2OERI:[OPIBND1] on CREATE of TEXT INDEX with CURSOR_SHARING
24421259.2.0.3, 10.1.0.2Wrong results from PQ which compares a CHAR column to a BIND variable
23082929.0.1.4, 9.2.0.2, 10.1.0.2ORA-7445 [kkslhib] for INTO <bind> using CURSOR_SHARING and SESSION_CACHED_CURSORS
22736049.0.1.4, 9.2.0.2, 10.1.0.2CURSOR_SHARING=FORCE may not share cursors using a BETWEEN clause with CBO
20528368.1.7.4, 9.0.1.4, 9.2.0.2, 10.1.0.2Client dump possible using CALL statement with CURSOR_SHARING=FORCE
41979159.2.0.8CAST( x as number(n)) fails in PQ slaves with ORA-1727 with cursor_sharing
36142999.2.0.6Dump adding a subscriber with a rule containing literals with CURSOR_SHARING = FORCE|SIMILAR
24420979.2.0.2INSERTS into USER-DEFINED TYPES with CURSOR_SHARING=FORCE does not share cursors
22376109.2.0.2OERI:[kgskbwt1] / OERI:[kskbind1] possible using CURSOR_SHARING
23007199.0.1.4, 9.2.0.1Spin possible in PRSGNT when CURSOR_SHARING=SIMILAR
22626658.1.7.4, 9.0.1.4, 9.2.0.1ORA-7445 [kkslpbp] possible with CURSOR_SHARING=FORCE
22597879.0.1.4, 9.2.0.1Dump possible in EXPCMPBND() with CURSOR_SHARING and GROUPING SETS
21546459.0.1.3, 9.2.0.1Spin in KKSFBC possible when CURSOR_SHARING=FORCE
19479749.0.1.2, 9.2.0.1False ORA-1008 possible using EXECUTE IMMEDIATE with CURSOR_SHARING=SIMILAR
18401999.0.1.2, 9.2.0.1OERI:EVAGGSID-1 possible using user defined aggregates (UDAG) with CURSOR_SHARING=FORCE|SIMILAR
17820258.1.7.4, 9.2.0.1Client may dump/error using DML RETURNING with CURSOR_SHARING=FORCE|SIMILAR
17775048.1.7.4, 9.0.1.4, 9.2.0.1Hang possible with CURSOR_SHARING=FORCE (or SIMILAR in 9i)
17649259.0.1.4, 9.2.0.1OERI:QCTSTC2O1 possible using CURSOR_SHARING = SIMILAR
21591528.1.7.4, 9.0.1.0Cursors not shared with CURSOR_SHARING=FORCE if it has a transitive predicate
15384508.1.7.3, 9.0.1.0Dump in KXSPOAC possible CURSOR_SHARING=FORCE set
13658738.1.7.2, 9.0.1.0OERI:17182 / CGA corruption with CURSOR_SHARING=FORCE
13588718.1.7.3, 9.0.1.0CURSOR_SHARING=FORCE may dump if first bind is a literal
9842518.1.7.2, 9.0.1.0CURSOR_SHARING=FORCE can cause ORA-29909 when using an ANCILLARY OPERATOR
2485018OERI:[KKSLGOP1] from SQL issued over a DBLINK with CURSOR_SHARING
22214078.1.7.4ORA-3106 / OERI:15212 using BINDS over DBLINK with CURSOR_SHARING=FORCE
15454738.1.7.2, 9.0.1.0ORA-979 possible using CURSOR_SHARING=FORCE with GROUP BY & ORDER BY & LITERALS
11117968.1.7.0Dump possible from CURSOR_SHARING=FORCE
9841328.1.7.0Literal in cursor expression can CORE DUMP with CURSOR_SHARING=FORCE
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值