影响数据库性能与稳定性的几个重要参数

149 篇文章 20 订阅

今天谈谈下面这几个参数对数据库性能和稳定性的影响:

  • cursor_sharing:游标共享
  • _optim_peek_user_binds:绑定变量窥视
  • _optimizer_adaptive_cursor_sharing:自适应游标共享(简称ACS),一般还包括另外两个_optimizer_extended_cursor_sharing和_optimizer_extended_cursor_sharing_rel 参数

 

_optim_peek_user_binds和ACS

在10g,因为没有ACS,一般建议客户关闭绑定变量窥视功能的情况多一些。

在11g,很多客户还是将绑定变量窥视和ACS都关闭了,原因有的是数据库从11g升级而来,升级后没有改,还有就是因为ACS早期版本有一些bug。其实这是两个很好的参数,可以在代码写的不是太好的情况下,也能获得比较好的性能。虽然ACS可能还有一些小bug没有解决,到了11.2.0.4版本应该都不是大问题了。老虎刘建议还是都开启比较好。

最重要的参数还在下面,如果做到了下面这两点,上面两个参数就显得不是那么重要了:

首先,cursor_sharing这个参数对系统性能和稳定性都非常重要,可惜经常被忽略,建议使用该参数的默认值:即 cursor_sharing=EXACT,而不是FORCE或similar

    这要求应该使用绑定变量的地方,必须使用绑定变量。这个对于OLTP系统来说是铁律,不容置疑,cursor_sharing=FORCE通常就是为了解决该使用绑定变量而没有使用绑定变量的情况。前年在网上看到一个广为流传的某水果公司的AWR报告,居然设置 cursor_sharing= FORCE ,令人感叹啊。

 

其次,还有一个重要的补充条件

不该使用绑定变量的地方,不用绑定变量:对那些唯一值较少的字段,特别是数据分布不均的情况,不建议使用绑定变量。如type、status等字段,我们建议使用常量:where type=1 and status=2。这种情况如果使用了绑定变量,就是绑定变量窥视和ACS发挥作用的时候。

如果cursor_sharing=FORCE;或者cursor_sharing=EXACT,但是在数据分布不均的字段上也使用了绑定变量(两者基本上是等同的,虽然后一种略好于前一种情况),那么就要考虑“绑定变量窥视”和“自适应游标”两个参数的影响了。

 

看下面几种情况:

1、关闭“绑定变量窥视”(默认是开启):

ACS同时失效,这时系统的稳定性好(不会因为绑定变量的不同,发生执行计划改变),但是整体性能会下降:因为不能窥视绑定变量,只能按照字段是数据分布均匀的情况来计算,在能否使用索引,返回行源的估值上,都会出现较大的偏差,有时可能会配合使用hint来提高SQL性能。

 

2、如果开启了“绑定变量窥视”而不开启ACS(默认是开启):

那么系统就会极不稳定:比如硬解析窥视到一个绑定变量适合全表扫描的执行计划,不管接下来的绑定变量是否能使用索引,都会一直全表扫描下去,直到下次硬解析时再次窥视绑定变量才可能重新生成新的执行计划。

 

3、如果开启“绑定变量窥视”,同时开启ACS:

这种情况在解决了一部分稳定性的同时,兼顾了性能。也是11g新增的ACS比10g没有ACS进步的地方:执行计划不再从一而终,而是会根据绑定变量的不同,不是很及时的做出调整:比如第一次窥视到的绑定变量适合全表扫描,那么第二次即使使用的绑定变量适合走索引,也还是会使用全表扫描的执行计划,下一次再次执行就会纠正为使用索引的执行计划(具体请参考ACS的实现原理)。

绑定变量窥视和ACS这两个参数是与直方图信息紧密联系在一起的,关闭直方图收集,也就相当于关闭了绑定变量窥视和ACS,即使开启了这两个参数。直方图能较为准确的反映数据分布不均字段的数据分布情况,一般使用默认选项(auto),某些特殊情况可以补充或去掉某些字段的直方图信息。一些客户在数据库级关闭收集直方图的做法是不建议的。

 

最佳实践:

cursor_sharing=EXACT + 合理使用绑定变量。合理就是:类似ID、account_no等唯一值等于或接近表行数的字段,必须使用绑定变量;而type、status等唯一值少且数分别不均的字段,不使用绑定变量。绑定变量窥视和ACS保持默认开启状态。

 

特殊情况:

1、字段唯一值有一定的数量(介于少与多之间),比如1000个,如果数据分布均匀,则可以使用绑定变量。如果字段分布不均,则把占比多的几个值,使用常量,其他值使用绑定变量。

2、字段唯一值少,还有经常互相转变的情况,比如常见的工单处理表:没有处理的状态是0,处理后的状态是1,夜间统计信息收集后,由于字段值的不稳定,统计信息经常不能反映表的实时数据分布情况,这种情况谈是否使用绑定变量已没有意义,涉及这类表的SQL,可以关闭字段上的直方图收集,再配合rownum和hint 来提高SQL效率和稳定性,必要时还可以使用dynamic_sampling(动态采样)来辅助优化器做出正确的执行计划。

 

最差组合:

cursor_sharing=FORCE

_optim_peek_user_binds=TRUE(开启绑定变量窥视)

_optimizer_adaptive_cursor_sharing=FALSE(关闭ACS,还有其他两个参数也要一起设置)

执行计划不稳定的同时还会带来低性能。

 

以上言论仅代表个人,如与oracle公司文档冲突,以oraclce公司文档为准。如有不当之处敬请指正,提前感谢!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Lepus(天兔)是数据库企业监控系统,针对互联网企业开发的一款专业、强大的企业数据库监控管理系统,企业通过Lepus可以对数据库的实时健康和各种性能指标进行全方位的监控。目前已经支持MySQL、Oracle、MongoDB、Redis数据库的全面监控. Lepus可以在数据库出现故障或者潜在性能问题时,根据用户设置及时将数据库的异常进行报警通知到数据库管理员进行处理和优化,帮助企业解决数据库性能监控问题,及时发现性能和瓶颈,避免由数据库潜在问题造成的直接经济损失。Lepus能够查看各种实时性能状态指标,并且对监控、性能数据进行统计分析,从运维者到决策者多个层面的视角,查看相关报表。帮助决策者对未来数据库容量进行更好的规划,从而降低了硬件成本。 Lepus是一个真正的能够帮助企业解决数据库监控和运维的问题,主要可以帮企业解决如下问题: 1.帮助企业解决数据库性能监控问题,及时发现性能和瓶颈,避免由数据库潜在问题造成的直接经济损失  "Lepus数据库企业监控系统"是针对互联网企业开发的一款专业、强大的企业数据库监控管理系统,企业通过Lepus可以对数据库的实时健康和各种性能指标进行全方位的监控。目前已经支持MySQL、Oracle、MongoDB、Redis数据库的全面监控. Lepus可以在数据库出现数据库无法连通、会话数、进程数、等待事件、同步、延时等故障或者潜在性能问题时,根据用户设置阀值及时将数据库的异常进行报警通知到数据库管理员进行处理和优化,避免因数据库故障或性能瓶颈造成直接的经济损失。 2.帮助企业运维领导决策者更好的统筹数据库容量资源,降低企业硬件成本 Lepus采用列式方式呈现监控指标,适合中大型互联网公司大规模数据库的监控管理。通过WEB界面,企业运维人员和决策者可以进行任意几台主机或所有主机监控的数据库性能、系统资源使用情况对比,并提供数据库性能资源按不同维度排序功能,以及系统资源Top信息图表,帮助决策者更好的发现哪些数据库性能开销大,哪些比较空闲,从运维者到决策者多个层面的视角,查看相关报表。帮助决策者对未来数据库容量进行更好的规划,从而降低了硬件成本。 3.帮助企业DBA运维人员解决重复和枯燥的工作,提高运维人员工作效率 面对几时台甚至上百台数据库服务器,如果没有统一的数据库的基础信息,将会使数据库运维管理变的无序,如果想了解数据库的基本健康状态信息,则需要登录数据库或登录服务器。重复的工作容易使人疲惫和厌倦。Lepus提供数据库的基础数据指标采集,比如数据库版本,运行时间,基本健康状态,核心配置参数等基础数据,有了这些基础数据,无需登录机器即可通过系统集中查询,减少了DBA运维人员的重复性工作和枯燥的敲命令工作。 4.慢查询推送和AWR性能报告,降低数据库运维人员和开发人员的沟通成本 Lepus拥有创新的MySQL慢查询分析,TopSQL自动推送,基于时间范围的MySQL AWR性能报告功能。打破了数据库管理人员被动的联系开发人员解决SQL问题的常规低效率现象。Lepus会定时收集影响数据库稳定性的慢SQL,并根据计划任务定时推送查询次数最多,查询时间最长的TopSQL给相关开发人员,开发人员也可以通过有限的权限自主查询任意时间内的慢SQL语句。也可以通过在线AWR性能报告功能查询数据库历史任意时间的数据库性能问题和瓶颈。降低数据库运维人员和开发人员的沟通成本。
目录 摘要 3 ABSTRACT 3 1. 灾难类型 4 2. 恢复类型 4 3. 恢复的级别 4 4. 需要防止的故障级别 4 4.1 可接受的数据丢失量 5 4.2 允许用于恢复的时间量 5 4.3 备份和恢复 5 5. 灾难恢复方案 5 5.1 简单备份 6 5.2 备份和日志保留 7 6. 高级存储备份 8 7. 数据库恢复 9 摘要 随着数据库技术在各个行业和各个领域大量广泛的应用,在对数据库应用的过程中,人为误操作、人为恶意破坏、系统的不稳定、存储介质的损坏等等原因,都有可能造成重要数据的丢失。一旦数据出现丢失或者损坏,都将给企业和个人带来巨大的损失。这就需要进行数据库恢复。 关键词:数据库技术;灾难性;恢复;数据备份 ABSTRACT With the database technology in various industries and a large number of wide application in various fields, in the process of database applications, artificial misuse, human vandalism, system instability, damage to storage media and other reasons may have resulted in important data lost. Once the data appears lost or damaged, both businesses and individuals will give enormous losses. This need for database recovery. Abstract: Database technology; catastrophic; recovery; Data BackupDevice Driver; Data Backup; Logical Block Address; 数据库灾难性恢复 1. 灾难类型 为了使数据库损失降低到最小程度,需要一个恢复策略,确保它起作用,并经常实行策略,一些灾难类型包括: 1. 系统故障。电源故障、硬件故障或软件故障都能够使数据库处于不一致状态。 2. 事务故障。用户无意中会用错误数据修改数据库,从而毁坏数据库。 3. 介质故障。如果磁盘驱动器变得不能使用,那么可能会丢失所有或部分数据。 4. 自然灾难。系统所在的设施可能会遭受火灾、洪水或其它类似灾难的损坏。 2. 恢复类型 DB2 考虑到了下列恢复类型: 1. 崩溃恢复。这种类型的恢复通过撤销(回滚)未提交的事务来防止数据库处于不一致状态。 2. 版本恢复。这种类型的恢复通过使用从 BACKUP 命令获取的备份映像来恢复先前的数据库版本。恢复的数据库将包含在执行 BACKUP 命令时所处状态的信息。如果在执行备份之后针对数据库执行进一步操作,那么该信息将丢失。 3. 前滚恢复。这种类型的恢复通过使用完全数据库备份,结合日志文件来扩展版本恢复。必须先恢复备份以用作基线;然后在该备份之上应用日志。该过程会将数据库或表空间恢复到某个特定时间点。前滚恢复要求启用归档日志记录。 3. 恢复的级别 建立灾难恢复计划对于现代企业至关重要。企业数据库中的信息对于进行业务活动是极其重要的。保护该数据以及在灾难之后确保其“生命”是很重要的活动。当构建 DR计划时,有三个关键级别问题。 4. 需要防止的故障级别 要防止的故障级别通常是近似性问题。原始数据与其备份之间在物理上有多紧密?备份数据可以在不同的驱动器上、在独立的机器上、在独立的楼层上或在不同的建筑物里。不可能预测所有可能的灾难。火灾、水灾或甚至用户的恶作剧都可能是企业必须面对的问题。解决方案的设计应该包括公司希望防止最坏情况的方案。 4.1 可接受的数据丢失量 所有企业都不希望在故障之后丢失任何数据。虽然不丢失数据是可能的,但由于可能需要的复杂性和费用(尤其是如果所防止的故障级别非常高),这通常是不实际的。可接受的数据丢失量取决于数据对公司有多重要以及有什么资源可用于确保其生命。 4.2 允许用于恢复的时间量 恢复所需的时间量类似于高可用性的目标。它与高可用性解决方案之间的差异在于所防止的故障类型以及通常认为合理的时间长度。HA 故障转移通常以秒和分钟来衡量,而灾难恢复则可能以小时和天来进行衡量。不过并非总是这样,但这个差异区分了对这些解决方案的相对期望。 4.3 备份和恢复 数据库备份创建了数据库的时间点映象,它是灾难恢复解决方案的基本组件。DB2 提供了几种备份,包括脱机备份、联机备份和增量备份。从备份恢复所需的时间取决于数据库的大小和可用于执行恢复的硬件资源。 由于数据库备份只捕获时间点的数据,因此无法通过一个简单恢复来恢复备份之后发生的任何数据更改。要恢复备份之后完成的事务,就需要应用日志文件。可以从备份和日志文件(通过在日志文件中进行“前滚”来应用)来恢复数据库。这允许恢复到某个时间点或恢复到日志文件结束。 因此,如果 DR 解决方案必须恢复自上次备份以来的事务,那么保留日志文件是非常关键的。有两个提高日志保留的 DB2 特性:双日志记录和用户出口工具,已在关于数据库复制 HA 选项的部分中进行了讨论。 5. 灾难恢复方案 灾难恢复方案可以分成三类:简单备份、备份和日志保留、高级存储备份 。 虽然不是每个解决方案都清晰地被划入这三类中的某一类,但它们确实为您理解灾难恢复选项提供了合理的框架。 5.1 简单备份 MySQL表保存为文件方式,很容易备份。要想保持备份的一致性,对相关表执行LOCK TABLES操作,然后对表执行FLUSH TABLES。你只需要读锁定;这样当你复制数据库目录中的文件时,允许其它客户继续查询表。需要FLUSH TABLES语句来确保开始备份前将所有激活的索引页写入硬盘。 备份数据库的另一个技术是使用mysqldump程序或mysqlhotcopy脚本。 1. 完全备份数据库: 2. shell> mysqldump --tab=/path/to/some/dir --opt db_name 或: shell> mysqlhotcopy db_name /path/to/some/dir 只要服务器不再进行更新,还可以只复制所有表文件(*.frm、*.MYD和*.MYI文件)。mysqlhotcopy脚本使用该方法。(但请注意如果数据库包含InnoDB表,这些方法不工作。InnoDB不将表的内容保存到数据库目录中,mysqlhotcopy只适合MyISAM表)。 3. 如果mysqld在运行则停止,然后用--log-bin[=file_name]选项来启动。二进制日志文件中提供了 执行mysqldump之后对数据库的更改进行复制所需要的信息。 对于InnoDB表,可以进行在线备份,不需要对表进行锁定; MySQL支持增量备份:需要用--log-bin选项来启动服务器以便启用二进制日志;当想要进行增量备份时(包含上一次完全备份或增量备份之后的所有更改),应使用FLUSH LOGS回滚二进制日志。然后,你需要将从最后的完全或增量备份的某个时刻到最后某个点的所有二进制日志复制到备份位置。这些二进制日志为增量备份;恢复时,按照下面的解释应用。下次进行完全备份时,还应使用FLUSH LOGS或mysqlhotcopy --flushlogs回滚二进制日志。如果MySQL服务器为从复制服务器,则无论选择什么备份方法,当备份从机数据时,还应备份master.info和relay-log.info文件。恢复了从机数据后,需要这些文件来继续复制。如果从机执行复制LOAD DATA INFILE命令,你应还备份--slave-load-tmpdir选项指定的目录中的SQL_LOAD-*文件。(如果未指定,该位置默认为tmpdir变量值)。从机需要这些文件来继续复制中断的LOAD DATA INFILE操作。 如果必须恢复MyISAM表,先使用REPAIR TABLE或myisamchk -r来恢复。99.9%的情况下该方法可以工作。如果myisamchk失败,试试下面的方法。请注意只有用--log-bin选项启动了MySQL从而启用二进制日志它才工作; 1. 恢复原mysqldump备份,或二进制备份。 2. 执行下面的命令重新更新二进制日志: 3. shell> mysqlbinlog hostname-bin.[0-9]* | mysql 在某些情况下,你可能只想要从某个位置重新运行某些二进制日志。(通常你想要从恢复备份的日期重新运行所有二进制日志,查询不正确时例外)。 还可以对具体文件进行选择备份: • 要想复制表,使用SELECT * INTO OUTFILE 'file_name' FROM tbl_name。 要想重载表,使用LOAD DATA INFILE 'file_name' REPLACE ...并恢复。要避免复制记录,表必须有PRIMARY KEY或一个UNIQUE索引。当新记录复制唯一键值的旧记录时,REPLACE关键字可以将旧记录替换为新记录。 如果备份时遇到服务器性能问题,可以有帮助的一个策略是在从服务器而不是主服务器上建立复制并执行备份。如果使用Veritas文件系统,可以这样备份: 1. 从客户端程序执行FLUSH TABLES WITH READ LOCK。 2. 从另一个shell执行mount vxfs snapshot。 3. 从第一个客户端执行UNLOCK TABLES。 4. 从快照复制文件。 5. 卸载快照。 只创建数据库备份确实创建了一个 DR 解决方案。它也许是非常有限的,这取决于您的环境。通过从“活动”的系统上移走所创建的备份,可以提高保护的级别。增加数据库备份的频率也降低了数据丢失的风险。备份软件对于创建和维护 DB2 备份可能非常有帮助。例如,IBM 的 Tivoli Storage Manager 和 Veritas 的 Net Backup® 都提供了允许在其软件控制的设备上直接备份和维护 DB2 数据库的解决方案。这些设备可以是磁带库或另一种存储设备。 简单备份适合于只读数据库或由能轻松重新创建的批处理作业填充的数据库,或者在备份之间不必维护数据库更改的情况下。 表 1.简单备份的优缺点 优点: 缺点: 保护级别: 数据库备份可以转移到外部位置,以提高保护级别 数据丢失的风险: 备份之间的数据更改可能会丢失(运行增量备份来降低风险的影响) 恢复所需的时间: 数据库恢复需要很长时间 5.2 备份和日志保留 保留数据库日志文件与数据库备份一起创建了更完善的 DR 解决方案。日志文件允许恢复备份之间发生的数据更改。该解决方案的真正复杂性在于保护日志文件以确保它们在恢复期间的可用性。如果选择实现双日志记录,DB2 可以将日志文件放在不同的位置,如果确保这些位置在不同的存储器阵列上,那么保护级别就会得到提高。但是,日志文件仍面临存储子系统故障。如在高可用性的日志传送选项中所提到的,用户出口程序可以提供重定位日志文件的替代方法。 用户出口可以将已关闭的日志文件移到当前系统可用存储阵列之外的位置,从而提高保护级别。这里的告诫是它只移动已关闭的日志文件。即使已实现了双日志记录,包含活动事务的日志文件仍面临因阵列丢失或存储设备故障而产生的丢失。该解决方案适合于大多数面向商业事务的环境。 它均衡了最小化数据丢失风险的需要和维护 DR 解决方案所需的成本。 表 2.备份加日志保留的优缺点 优点: 缺点: 保护级别: 数据库备份可以转移到外部位置,以提高保护级别 数据丢失的风险: 如果使用适当的步骤来维护日志文件,会大大降低数据丢失的风险 恢复所需的时间: 数据库恢复需要时间,应用日志文件将增加恢复时间 6. 高级存储备份 我们在高可用性下的高级存储选项部分中讨论过这个主题,相同的原则在这里也适用。正如在那部分中所见的,STANDBY方法允许当数据库副本处于暂挂状态时在辅助系统上执行数据库备份。 创建数据库副本已经创建了 DR解决方案的一部分。备份副本提高了保护级别。如果用双日志记录和用户出口程序正确实现了这个高级存储备份,那么它就为核心企业数据库生成了最好的 DR解决方案。 该解决方案最适合处于企业活动核心的数据库系统。示例可能包含了供应链管理和在线代理系统。 表 3.用于灾难恢复的高级存储备份优缺点 优点: 缺点: 保护级别: 保护级别本来就很高,而且可以通过耦合存储子系统来提高保护级别。 数据丢失的风险: 如果采用双日志记录和用户出口程序,会大大降低数据丢失的风险 恢复所需的时间: 恢复所需的时间非常短。 7. 数据库恢复 数据库恢复中心理解为: (1)当数据库出现损伤或由于人员误操作、操作系统本身故障所造成的数据看不见、无法读取、丢失。工程师通过技术手段读取将数据都恢复为可以读的数据,数据恢复不是靠一两种软件就可以完成,往往需要数个工程师靠经验不同的方式才能恢复数据,当然数据库恢复还包括各种操作系统:除普通的WINDOWS外,还有Unix、Linux、APPLE机,而以UNIX为多。 (2)数据库数据已经存在,但是无法正常使用,提示错误,都应归属为数据修复,举例说明:SQL SERVER文件打开提示LDF文件损坏,或错误823等等。 数据库恢复实际上就是利用技术手段把不可见或不可正常运行的数据文件恢复成正常运行的过程。 方法一 如何附加数据库(企业管理器) 1、展开服务器组,然后展开服务器。 2、右击"数据库",然后选择"所有任务"/"附加数据库"。 3、输入要附加的数据库的 MDF(master 数据文件)名称。如果不确定文件位于何处,单击浏览("...")搜索。最多可以指定16个文件名。 4、若要确保指定的MDF文件正确,请单击"验证"。"原文件名"列列出了数据库中的所有文件(数据文件和日志文件)。"当前文件位置"列列出了文件的名称和路径。如果Microsoft? SQL Server? 找不到指定位置的文件,则附加操作将失败。可以对"当前文件位置"列进行编辑,并且文件的当前位置必须在该列中才能使附加操作得以进行。例如,如果在分离操作前改变了文件的默认位置,则必须指定当前位置才能使附加操作顺利进行。 5、在"附加为"框内,输入数据库的名称。数据库名称不能与任何现有数据库名称相匹配 6、指定数据库的所有者。 7、单击"确定"按钮。新附加的数据库数据库节点即创建在"数据库"文件夹中。 方法二 sp_attach_db 将数据库附加到服务器。 语法 sp_attach_db [ @dbname = ] 'dbname' , [ @filename1 = ] 'filename_n' [ ,...16 ] 参数 [@dbname =] 'dbname' 要附加到服务器的数据库的名称。该名称必须是唯一的。dbname 的数据类型为 sysname,默认值为 NULL。 [@filename1 =] 'filename_n' 数据库文件的物理名称,包括路径。filename_n 的数据类型为 nvarchar(260),默认值为 NULL。最多可以指定 16 个文件名。参数名称以 @filename1 开始,递增到 @filename16。文件名列表至少必须包括主文件,主文件包含指向数据库中其它文件的系统表。该列表还必须包括数据库分离后所有被移动的文件。 返回代码值 0(成功)或 1(失败) 结果集 无 注释 只应对以前使用显式 sp_detach_db 操作从数据库服务器分离的数据库执行 sp_attach_db。如果必须指定多于 16 个文件,请使用带有 FOR ATTACH 子句的 CREATE DATABASE。 如果将数据库附加到的服务器不是该数据库从中分离的服务器,并且启用了分离的数据库以进行复制,则应该运行 sp_removedbreplication 从数据库删除复制。 权限 只有 sysadmin 和 dbcreator 固定服务器角色的成员才能执行本过程。 示例 下面的示例将 pubs 中的两个文件附加到当前服务器。 EXEC sp_attach_db @dbname = N'pubs', @filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf', @filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf' 请参见 CREATE DATABASE sp_attach_single_file_db sp_detach_db sp_helpfile sp_removedbreplication 系统存储过程

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值