pbxt引擎的参数描述资料

6. PBXT System Variables

The following system variables are available for controlling the behavior of the PBXT engine.

System variable can be set in the my.cnf file or on the mysqld command line. Variable that can be set dynamically can be

这些变量的定义可以在 my.ini 或者 my.cnf 文件中定义其值;

 

set using the SET GLOBAL command which is sent to the server. System variables that can be set dynamically are specified as such below.

Variables that specify a number of bytes may include a unit indication after the value. For example: 100KB, 64MB, etc. There should be no space between the number and the unit. Units are case insensitive (KB = Kb = kb). If no unit is specified then bytes is assumed. The recognized units are:

KB (or K) - Kilobyte, 1024 byte
MB (or M) - Megabyte, 1024 KB
GB (or G) - Gigabyte, 1024 MB
TB (or T) - Terabyte, 1024 GB
PB (or P) - Petabyte, 1024 TB

Variable that use this type of value are: pbxt_index_cache_sizepbxt_record_cache_size, pbxt_log_cache_size,pbxt_log_file_thresholdpbxt_checkpoint_frequencypbxt_data_log_thresholdpbxt_log_buffer_size,pbxt_data_file_grow_size and pbxt_row_file_grow_size.

3.1 Cache Memory Variables

PBXT has 3 caches: index, record and log. The current memory usage in these 3 areas can be determined usingSHOW ENGINE PBXT STATUS.

  • pbxt_index_cache_size
    This is the amount of memory allocated to the index cache. Default value is 32MB. The memory allocated here is used only for caching index pages (.xti files).

         内存 索引缓存文件大小,默认大小32M ,文件后缀为 .xti

 

  • pbxt_record_cache_size
  • This is the amount of memory allocated to the record cache used to cache table data. The default value is 32MB. This memory is used to cache changes to the handle data (.xtd) and row index (.xtr) files.
  • 内存记录缓存大小 默认32M  用于缓存数据 xtd文件和 行索引 xtr 文件
  • pbxt_log_cache_size (version 1.0/1.1)
    pbxt_trx_log_cache_size (version 1.5+)
    The amount of memory allocated to the transaction log cache used to cache on transaction log data (xlog-*.xt files). The default is 16MB.
  • 事务缓存大小 默认16M  文件命名 xlog-*.xt
  • pbxt_data_log_cache_size (version 1.5+)
    The amount of memory allocated to the data log cache used to cache data log data (dlog-*.xt files). The default is 16MB.
  • 数据日志缓存大小 默认16M  文件命名 dlog-*.xt

3.2 Transaction Manager Variables

The transaction manager variable control various aspects of the PBXT transactional system.

  • pbxt_log_file_threshold (version 1.0/1.1)
    pbxt_trx_log_threshold (version 1.5+)
    The size of a transaction log file (xlog-*.xt files) before "rollover", and a new log file is created. The default value is 32MB.
  • 日志文件大小门限,超过就创建新日志文件,默认大小32M, 文件命名 xlog-*.xt
  • pbxt_transaction_buffer_size (version 1.0/1.1)
    pbxt_trx_log_buffer_size (version 1.5+)

    The size of the global transaction log buffer (the engine allocates 2 buffers of this size). The default is 1MB. Data to be written to a transaction log file is first written to the transaction log buffer. Since the buffer is flushed on transaction commit, it only makes sense to use a large transaction log buffer if you have longer running transactions, or many transaction running in parallel.
  • 事务日志缓存大小,默认 1M,如果存在大事务,或者过个并发事务,请调大此值
  • pbxt_checkpoint_frequency
    The amount of data written to the transaction log before a checkpoint is performed. The default value is 24MB.
  • 在检查点之前执行数据写入的总量,默认值 24M
  • pbxt_sweeper_priority
    Determines the priority of the background Sweeper thread.:
    后台交换现场的优先级
    - Low (default). 
    - Normal (same as user threads).
    - High.

    The Sweeper is responsible for removing deleted records and index entries (deleted records also result from UPDATE statements). If many old deleted records accumulate search operations become slower. Therefore it may improve performance to increase the priority of the Sweeper on a machine with 4 or more cores.
  • 影响查询操作,在4核以上的机器可以适当调高此值
  • pbxt_auto_increment_mode
    The parameter determines how PBXT manages auto-increment values. There are 2 options:

    - MySQL standard (default).
    - Previous ID's are never re-used.

    In the standard MySQL mode it is possible that an auto-increment value is re-issued. This occurs when the maximum auto-increment value is deleted, and then MySQL is restarted. This occurs because the next auto-increment value to be issued is determined at startup by retrieving the current maximum auto-increment value from the table

    In mode 1, auto-increment values are never re-issued because PBXT automatically incrementing the table level AUTO_INCREMENT table option. The AUTO_INCREMENT table is incremented in steps of 100. Since this requires the table file to be flushed to disk, this can influence performance.
  • pbxt_flush_log_at_trx_commit
    This variable specifies the durability of recently committed transactions. By reducing the durability, the speed of write operations can be increased:

    - Lowest durability, the transaction log is not written or flushed on transaction commit. In this case it is possible to loose transactions if the server executable crashes.
    - Full-durability, the transaction log is written and flushed on every transaction commit (default).
    - Medium durabilty, the transaction log is written, but not flushed on transaction commit. In this case it is possible to loose transactions of the server machine crashes (for example, a power failer).

    In all cases, the transaction log is flushed at least once every second. This means that it is only every possible to loose database changes that occurred within the last second.
  • pbxt_log_file_count
    The number of transaction log files on disk before logs that are no longer required are deleted, default value is 3. The number of transaction logs on disk may exceed this number if the logs are still being read.

    If a transaction log has been read (i.e. the log is offline), it will be recycled for writing again, unless it must be deleted because the number of logs on disk exceeds this threshold. Recycling logs is an optimization because the writing a pre-allocated file is faster then writing to the end of a file.

    Note: an exception to this rule is Mac OS X. On Mac OS X old log files are not recycled because writing pre-allocated file is slower, then writing to the end of file (see below).
  • pbxt_offline_log_function
    This variable determines what happens to a transaction log when it is offline. A log is offline if PBXT is no longer reading or writing to the log. There are 3 possibilities:

    - Recycle log (default). This means the log is renamed and written again.
    - Delete log (default on Mac OS X).
    - Keep log. The logs can be used to repeat all operations that were applied to the database.
  • pbxt_record_write_threshold (version 1.1+)
    This value determines when the writer will start to transfer data from the transaction log to the record pointer (.xtr) and handle data (.xtd) files. The default is 4MB. If the value is set to zero then the parameter is ignored. The writer will also begin to transfer data when the transaction log cache is exhausted, or the record cache is full.
  • pbxt_index_dirty_threshold (version 1.1+)
    This is a percentage value. When the number of dirty pages in the index cache reaches this level, all indices are flushed. The default value is 80. The value 0 indicates that the indices should only be flushed when no cache pages can be freed.
  • pbxt_support_xa (version 1.1+)
    This variable pbxt_support_xa determines if XA (2-phase commit) support is enabled. Note: due to MySQL bug #47134, enabling XA support could lead to a crash. Default is disabled.

3.3 Data Log Variables

PBXT stores part of the database in the data logs. This is mostly data from rows containing long VARCHAR fields or BLOB data. The data logs are managed by the "compactor" thread. When a record is deleted from a data log, the data is marked as garbage. When the total garbage in a data log reaches a certain threshold, the compactor thread compacts the data log by copying the valid data to a new data log, and deleting the old data log.

The following system variables control the way data logs are managed.

  • pbxt_data_log_threshold
    The maximum size of a data log file. The default value is 64MB. PBXT can create a maximum of 32000 data logs, which are used by all tables. So the value of this variable can be increased to increase the total amount of data that can be stored in the database.
  • 数据日志文件大小门限,默认值是64M
  • pbxt_data_log_buffer_size (version 1.5+)
    The size of the global data log buffer (the engine allocates 2 buffers of this size). Data to be written to the data logs is first written to the data log buffer. Just like the transaction log buffer, the data log buffer is flushed on transaction commit.
  • pbxt_log_buffer_size
    In version 1.0 and 1.1, this is the size of the buffer used when writing a data log. The default is 256MB. The engine allocates one buffer per thread, but only if the thread is required to write a data log.

    In version 1.5 this is the size of the buffer used to cache data from transaction and data logs during sequential scans. The engine allocates 3 buffers of this size, one for each of the system background processes: Compactor, Sweeper and Writer. The default is 512Kb.
  • pbxt_garbage_threshold
    The percentage of garbage in a data log file before it is compacted. This is a value between 1 and 99. The default is 50.

3.4 File Grow Variables

The handle data and row index files are grown in chunks.

  • pbxt_data_file_grow_size
    The grow size of the handle data (.xtd) files. The default is 2MB.
  • pbxt_row_file_grow_size
    The grow size of the row index (.xtr) files. The default is 256Kb.

3.5 Data log 2nd Level Cache Variables (version 1.5+)

The Data log 2nd Level Cache stores data log records that fall out of the RAM based data log cache. The cache stores the records in a file on disk. The file should be located on hardware that allows fast random access, such as a Solid State Drive (SSD). 

  • pbxt_dlog_lev2_cache_file (versions 1.5+)
    The full path of the file in which the 2nd level data log cache is to be stored (default is: ./pbxt/dlog-lev2-cache.xt).
  • pbxt_dlog_lev2_cache_size (versions 1.5+)
    The size of the data log level 2 cache (default is 16GB). On startup the cache file with this size will be created if it does not exist. This can take a while.
  • pbxt_dlog_lev2_cache_enabled (versions 1.5+)
    Enable PBXT data log level 2 cache (default is 0 - i.e. not enabled).

7. Table Options

    table_option:
        ENGINE [=] PBXT
        | AUTO_INCREMENT [=] value
        | [DEFAULT] CHARACTER SET [=] charset_name
        | [DEFAULT] COLLATE [=] collation_name
        | COMMENT [=] 'string'
        | AVG_ROW_LENGTH [=] byte_length

PBXT supports the following table options:

  • ENGINE [=] PBXT
    Set the ENGINE option to PBXT to create a PBXT table.
  • AUTO_INCREMENT
    This option determines the minimum auto-increment value on the table.
  • [DEFAULT] CHARACTER SET
    Specify a default character set for the table. By default the database character set is used.
  • [DEFAULT] COLLATE
    Specify a default collation for the table.
  • COMMENT
    A comment for the table. Maximum of 60 characters.
  • AVG_ROW_LENGTH
    Specifies the average row size of the table. This size will be used for the length of the fixed data section of a row. Use CHECK TABLE to determine the best value for the average row size of an existing table. Note that CHECK TABLE dumps the information required to the MySQL log.

 

8. Differences to other Engines

The following is a list of differences between PBXT and other storage engines that are shipped by default with MySQL.

8.1 AUTO_INCREMENT option in SHOW CREATE TABLE

On tables created with the AUTO_INCREMENT table option, PBXT displays the original value set by the CREATE TABLE or ALTER TABLE statement.

For example:

        CREATE TABLE t1 (
          ID int primary key AUTO_INCREMENT, 
          NAME varchar(200)
        ) AUTO_INCREMENT = 1000 ENGINE=PBXT;
        INSERT t1 (NAME) VALUES ("abc"), ("def"), ("ghi");
        SHOW CREATE TABLE t1;

The result returned is:

        CREATE TABLE `t1` (
          `ID` int(11) NOT NULL AUTO_INCREMENT,
          `NAME` varchar(200) DEFAULT NULL,
          PRIMARY KEY (`ID`);
        ) ENGINE=PBXT AUTO_INCREMENT=1000 DEFAULT CHARSET=latin1

With ENGINE=MyISAM, the result is:

        CREATE TABLE `t1` (
          `ID` int(11) NOT NULL AUTO_INCREMENT,
          `NAME` varchar(200) DEFAULT NULL,
          PRIMARY KEY (`ID`);
        ) ENGINE=MyISAM AUTO_INCREMENT=1003 DEFAULT CHARSET=latin1

8.2 No Statement Level Sub-transactions

PBXT does not support statement level sub-transactions. This means that if an error occurs, PBXT will rollback the entire transaction, not just the current statement.

The only exception to this is the duplicate key error. PBXT undoes the INSERT or UPDATE statement when an duplicate key error occurs. The user is then free to decide whether to continue, or rollback the transaction.

Note that this can cause problems for replication, and means that INSERT with multiple rows should not be used when replicating PBXT tables. For example:

use test;
drop table if exists t;
create table t ( i int not null, unique index i (i) ) engine = PBXT;
set autocommit = 0;
insert into t values (1),(2),(2);
# error 1062 (duplicate key) occurs
commit;

select * from t;
i
1
2

In the above example, the INSERT statement is not completely rolled back. MySQL replication, however, will not replicate any part of the statement because it assumes that a transactional storage engine supports statement level sub-transactions.

 

9. Monitoring PBXT using xtstat

The executable xtstat can be used to monitor all internal activity of PBXT. The binary is built and installed automatically, along with the plug-in when you execute make install, as described abovextstat is installed in the bin directory.

xtstat polls the INFORMATION_SCHEMA.PBXT_STATISTICS table. The poll interval can be set using the --delay option, and is 1 second by default.

For the most statistics xtstat will display the difference in values between the current and previous polls. For example, if bytes written current value is 1000, and on the previous call it was 800, then xtstat display 200. This means that 200 bytes were written to disk in the intervening period.

Invoke xtstat as follows:

        $ xtstat [ options ]

For example:

        $ xtstat -D10

In order to poll every 10 seconds.

Note that statistic counters are never reset, even if a rollback occurs. For example, if an UPDATE statement is rolled back, the xtstat will still indicate that one write statement (see stat-write below) was executed.

If MySQL shuts down or crashes, xtstat will attempt to reconnect. xtstat can be terminated any time using theCTRL-C key cimbination.

Before PBXT has recovered, not all statistics are available. In particular, the statistics relating to PBXT background threads are not available (including the sweep and chkpnt statistics).

9.1 Command line options

xtstat options are as follows:

  • -?, --help
    Prints help text.
  • -h, --host=value
    Connect to host.
  • -u, --user=value
    User for login if not current user.
  • -p, --password[=value]
    Password to use when connecting to server. If password is not given it's asked from the tty.
  • -d, --database=value
    Database to be used (pbxt or information_schema required), default is information_schema.
  • -P, --port=value
    Port number to use for connection.
  • -S, --socket=value
    Socket file to use for connection.
  • -D, --delay=value
    Delay in seconds between polls of the database. Default is 1 second.
  • --protocol=value
    Connection protocol to use: default/tcp/socket/pipe/memory.
  • --display=value
    Columns to display: use short names separated by '-', partial matches are allowed.
    Use --display=all to display all columns available. See section below for details.

Connection options will also be taken from the MySQL config file if available.

9.2 Display options

The display string specified using the --display opton is a list of statistics to be displayed. It has the following format:

--display=group-type,group-type,group-type,...

Each statistic has a group and a type. Together both names identify a particular statistic (see below). You may specify a group or type on its own to specify all statistics in the group or type.

Note, for diagnostics it is best to capture all statistics. The reason is because you never know where a problem might turn up, so without certain statistics you may not be able to identify the problem.

In version 1.0 and 1.1 you have to specify -type, to select all statistics of a particular type. In version 1.5specifications will match either group or type if no '-' is used.

In version 1.0 and 1.1 use '--display=all' to indicate display all statistics, the default is 'time-msec,commt,row-ins,rec,ind,ilog,xlog,data,to,dirty'.

In version 1.5 the keyword 'all' or '*' can be used to specify a group or type, or both. In this way you can select all statistics of a certain group or type. Version 1.5 also includes a number of "non-standard" statistics, including:scan-*, retry-*, xlog-%use, data-%use. Add '+' to including non-standard statistics in a specification. For example xlog+, includes xlog-%use, while xlog includes all the transaction log statistics without the percentage cache usage.

In version 1.5 you can prefix an item with '~' to exclude the statistic (or statistics if a group or type is specified).

Example 1: Display all standard statistics:

--display=all
--display=all-*

Example 2: Include the non-standard statistics:

--display=all+
--display=xlog+

Example 3: Display the current time statistics and the index cache hits and misses:

--display=time,ind-hits,ind-miss

Example 4: Display a number statistic groups and types:

--display=time,ind,xlog,in,out

Example 5: Display read, write and sync times:

--display=wr.ms,rd.ms,sy.ms

Example 6: Display all stastistics accept transaction log stastistics:

--display=all,~xlog

9.3 Size indicators

Values display by xtstat are either a time in milliseconds, or a value in bytes, or a counter. If these values are to large to be displayed then the value is rounded and a size indicator is added.

The following size indicators are used:

  • K - Kilobytes (1,024 bytes)
  • M - Megabytes (1,048,576 bytes)
  • G - Gigabytes (1,073,741,024 bytes)
  • T - Terabytes (1,099,511,627,776 bytes)
  • t - thousands (1,000s)
  • m - millions (1,000,000s)
  • b - billions (1,000,000,000s)

9.4 Statistics

The following is a list of the statistics displayed by xtstat. Each statistic as a 2 part display name. The first part is the group and the second part is the type.

 

 Display nameVersionNameDescription
 time-curr1.0Current TimeThe current time in seconds
 time-msec1.0Time Since Last CallTime passed in milliseconds since last statistics call
 xact-commt1.0Commit CountNumber of transactions committed
 xact-rollb1.0Rollback CountNumber of transactions rolled back
 xact-waits1.0Wait for Xact CountNumber of times waited for another transaction
 xact-dirty1.0Dirty Xact CountNumber of transactions still to be cleaned up. This also includes all the currently running transactions. Cleanup means that the Sweeper thread must still scan the transcation and collect/mark any "garbage" left by the transaction. Garbage is, for example, versions of rows that are no longer visiable by any transaction.
 stat-read1.0Read StatementsNumber of SELECT statements
 stat-write1.0Write StatementsNumber of UPDATE/INSERT/DELETE statements
 rec-in1.0Record Bytes ReadBytes read from the record/row files
 rec-out1.0Record Bytes WrittenBytes written to the record/row files. This data is transfered from the transaction logs to the handle data (xtd) and the row index files (xtr).
 rec-rd.ms (before 1.5 use rec-r/ms)1.1Record Read TimeThe time in milliseconds spent reading record and row files =
 rec-wr.ms (before 1.5 use rec-w/ms)1.1Record Write TimeThe time in milliseconds spent writing record and row files
 rec-syncs/ms1.0Record File Flushes2 values separated by a '/': the number of flushes to data handle (.xtd) and row index (.xtr) files and the time taken in milliseconds to perform the flush operations.
 rec-hits1.0Record Cache HitsHits when accessing the record cache. The record cache caches the data handle (.xtd) and row index (.xtr) files.
 rec-miss1.0Record Cache MissesMisses when accessing the record cache
 rec-frees1.0Record Cache FreesNumber of record cache pages freed
 rec-%use Record Cache UsagePercentage of record cache in use. This value is displayed by xtstat as a percentage of the total cache available, but the value returned byPBXT_STATISTICS table is in bytes used.
 ind-in1.0Index Bytes ReadBytes read from the index files
 ind-out1.0Index Bytes WrittenBytes written to the index files. This data is transfered from the index log files (ilog) to the index files (xti), during a consistent flush of the index.
 ind-rd.ms (before 1.5 use ind-r/ms)1.1Index Read TimeThe time in milliseconds spent reading index files
 ind-wr.ms (before 1.5 use ind-w/ms)1.1Index Write TimeThe time in milliseconds spent writing index files
 ind-syncs/ms1.0Index File Flushes2 values separated by a '/': the number of flushes to index files and the time taken for the flush operations in milliseconds.
 ind-hits1.0Index Cache HitsHits when accessing the index cache
 ind-miss1.0Index Cache MissesMisses when accessing the index cache
 ind-%use1.0Index Cache UsagePercentage of index cache used. This value is displayed by xtstat as a percentage of the total cache available, but the value returned byPBXT_STATISTICS table is in bytes used.
 ind-%dty1.1Index Cache DirtyPercentage of index cache that is dirty
 ilog-in1.0Index Log Bytes InBytes read from the index log files
 ilog-out1.0Index Log Bytes OutBytes written to the index log files. This data is transfered from the index cache in main memory to the index log files (ilog) during a consistent flush of the index.
 ilog-rd.ms1.5Index Log Read TimeThe time in milliseconds spent reading index log files
 ilog-wr.ms (before 1.5 use ilog-w/ms)1.1Index Log Write TimeThe time in milliseconds spent writing index log files
 ilog-syncs/ms1.0Index Log File Syncs2 values separated by a '/': the number of flushes to index log files and the time taken for the flush operations in milliseconds
 xlog-in1.0Xact Log Bytes InBytes read from the transaction log files
 xlog-out1.0Xact Log Bytes OutBytes written to the transaction log files. This is data transfered from the transaction log buffer (pbxt_transaction_buffer_size) to the transaction log files (.xlog). This transfer occurs on commit or when the transaction log buffer is full.
 xlog-rd.ms (before 1.5 use log-r/ms)1.1Trx Log Read TimeThe time in milliseconds spent reading transaction log files. In version 1.1, this statistic incuded data-rd.ms (i.e. the read time for both transaction and data logs)
 xlog-wr.ms (before 1.5 use xlog-w/ms)1.1Trx Log Write TimeThe time in milliseconds spent writing transaction log files
 xlog-syncs1.0Trx Log File SyncsNumber of syncs (flushes) to transaction log files
 xlog-sy.ms (before 1.5 use xlog-msec)1.0Trx Log Sync TimeThe time in milliseconds spent syncing (flushing) transaction log files
 xlog-hits1.0Trx Log Cache HitsHits when accessing the transaction log cache
 xlog-miss1.0Trx Log Cache MissesMisses when accessing the transaction log cache
 xlog-%use1.0Trx Log Cache UsagePercentage of transaction log cache used. This value is displayed by xtstat as a percentage of the total cache available, but the value returned byPBXT_STATISTICS table is in bytes used.
 data-in1.0Data Log Bytes InBytes read from the data log files
 data-out1.0Data Log Bytes OutBytes written to the data log files. This data is transfered from the data log buffer (pbxt_log_buffer_size) to the data log files (.dlog), when the buffer is full, or on commit.
 data-rd.ms1.5Data Log Read TimeThe time in milliseconds spent reading data log files. In version 1.1 this statistic was included in thelog-r/ms statistic (see xlog-rd.ms above)
 data-wr.ms (before 1.5 use data-w/ms)1.1Data Log Write TimeThe time in milliseconds spent writing data log files.
 data-syncs1.0Data Log File SyncsNumber of flushes to data log files
 data-sy.ms (before 1.5 use data-msec)1.0Data Log Sync TimeThe time in milliseconds spent flushing data log files
 data-hits1.5Data Log Cache HitsHits when accessing the data log cache
 data-miss1.5Data Log Cache MissesMisses when accessing the data log cache
 data-%use1.5Data Log Cache UsagePercentage of data log cache used.
 l2data-in1.0Data Log L2 Cache Bytes InBytes read from the data log level 2 cache file
 l2data-out1.0Data Log L2 Cache Bytes OutBytes written to the data log level 2 cache file
 l2data-rd.ms1.5Data Log L2 Cache Read TimeThe time in milliseconds spent reading the data log level 2 cache
 l2data-wr.ms1.5Data Log L2 Cache Write TimeThe time in milliseconds spent writing the data log level 2 cache
 l2data-hits1.5Data Log L2 Cache Cache HitsHits when accessing the data log level 2 cache
 l2data-miss1.5Data Log L2 Cache Cache MissesMisses when accessing the data log level 2 cache
 l2data-%use1.5Data Log L2 Cache Cache UsagePercentage of data log level 2 cache used
 to-chkpt1.0Bytes to CheckpointBytes written to the transaction log since the last checkpoint
 to-write1.0Log Bytes to WriteBytes written to the transaction log, still to be written to the database
 to-sweep1.0Log Bytes to SweepBytes written to the transaction log, still to be read by the Sweeper thread
 sweep-waits1.0Sweeper Wait on XactAttempts to cleanup a transaction
 scan-index1.0Index Scan CountNumber of index scans
 scan-table1.0Table Scan CountNumber of table scans
 row-sel1.0Select Row CountNumber of rows selected
 row-ins1.0Insert Row CountNumber of rows inserted
 row-upd1.0Update Row CountNumber of rows updated
 row-del1.0Delete Row CountNumber of rows deleted
 retry-iscan1.5Index Scan RetriesIndex scans restarted because of locked record
 retry-rlist1.5Record List RereadsRecord list rescanned due to lock

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值