金沙国际官网_金沙国际平台登录

因为这个金沙国际官网_金沙国际平台登录网站与很多的大型澳门赌场都有合作,金沙国际官网_金沙国际平台登录尽职尽责,高效执行,保持好奇心,不断学习,追求卓越,点击进入金沙国际官网_金沙国际平台登录马上体验吧,所以现在也正式地开始了营业。

您的位置:金沙国际官网 > 数据库 > 2017中使用json传参时解析遇到的多层解析问题,将

2017中使用json传参时解析遇到的多层解析问题,将

发布时间:2019-11-03 23:37编辑:数据库浏览(198)

    Percona TokuDB

    Percona TokuDB. 1

    1.     TokuDB说明... 1

    2.     TokuDB安装... 1

    3.     使用TokuDB. 1

    3.1 快速插入和富索引... 1

    3.2 聚集secondary索引... 1

    3.3 在线索引创建... 1

    3.4 在线添加,删除,扩展,重命名列... 1

    3.5            压缩细节... 1

    3.6 修改表的压缩... 1

    3.7 无io读复制... 1

    3.8 事务和ACID兼容恢复... 1

    3.9 管理Log大小... 1

    3.10 恢复... 1

    3.11 关闭写缓存... 1

    3.12 进度跟踪... 1

    3.13 迁移到TokuDB. 1

    4 TokuDB后台 ANALYZE TABLE. 1

    4.1 后台作业... 1

    4.2 自动分析... 1

    4.3 系统变量... 1

    4.4 information_schema相关表... 1

    5 TokuDB变量... 1

    6 TokuDB Troubleshooting. 1

    6.1 得知问题... 1

    6.2 TukoDB锁... 1

    6.2.1 TOKUDB_TRX表... 1

    6.2.2 TOKUDB_LOCKS表... 1

    6.2.3 TOKUDB_LOCK_WAITS表... 1

    6.3 引擎状态... 1

    6.4 全局状态变量... 1

    7 Percona TokuBackup.. 1

    7.1 从binary安装... 1

    7.2 备份... 1

    7.3 还原... 1

    7.4 推荐配置... 1

    7.4.1 监控进度... 1

    7.4.2 排除源文件... 1

    7.4.3 备份率阀值... 1

    7.4.4 限制备份目标... 1

    7.4.5 错误报告... 1

    7.4.6 限制和已知的问题... 1

    8 FAQ.. 1

     

    System.data.sqlclient.sqlexception:将截断字符串或二进制数据终止。

    开发新的系统,DB部分使用了SQL Server从2016版开始自带的Json解析方式。

    1.  TokuDB说明

    具体看:

    错误原因:输入的字符串长度超过数据库设置的长度

    用了快半年,在个人项目,以及公司部分项目上使用了,暂时还没遇到大的问题,和性能问题。

    2.  TokuDB安装

    Percona Server兼容独立可用的TokuDB存储引擎包。TokuDB引擎必须分开下载然后以插件的形式启用。这个包可以独立安装,不需要任何特定的版本的Percona Server。

    TokuDB存储引擎是可扩展,ACID,MVCC的存储引擎,提供基于索引查询,提供online的框架修改和减少slave延迟。这个存储引擎设计师为了写入性能,是基于fractal tree的。

    警告:

           目前percona提供的TokuDB被使用在Percona Server 5.7。TokuDB引擎从其他地方下载的不能被兼容。TokuDB文件格式和MySQL变种不是一样的。从一个变种到另外一个可能需要做数据导入导出。

     

    前置需要

    Libjemalloc库

    ToKuDB需要libjemalloc 3.3.0或者更高版本。可以从percona或者其他地方下载。如果libjemalloc,之前没有安装,TokuDB存储引擎在使用apt,yum安装的时候自动安装,但是并不会被加载到mysql,可以使用如下配置导入。

    [mysqld_safe]

    malloc-lib= /path/to/jemalloc

    大页面转化

    TokuDB如果在大页面转化启动的时候不会被启动。大页面转化是新内核版本的功能。可以通过以下语句检查时候启动。

    $ cat /sys/kernel/mm/transparent_hugepage/enabled

     [always] madvise never

    如果启动了大页面转化,启动TokuDB引擎会受到错误日志里面有如下信息:

    Transparent huge pages are enabled, according to /sys/kernel/mm/redhat_transparent_hugepage/enabled

    Transparent huge pages are enabled, according to /sys/kernel/mm/transparent_hugepage/enabled

    你也可以关闭大页面转化功能,把transparent_hugepage=never传递到内核bottloader工具。但是要重启。也可以使用以下命令关闭:

    echo never > /sys/kernel/mm/transparent_hugepage/enabled

    echo never > /sys/kernel/mm/transparent_hugepage/defrag

     

    安装

    现在TukoDB可以使用Percona的源安装:

    如果为yum:

    [root@centos ~]# yum install Percona-Server-tokudb-57.x86_64

    如果为apt:

    root@wheezy:~# apt-get install percona-server-tokudb-5.7
    

     

    启动TokuDB存储引擎

    一旦安装好TokuDB就会有如下输出:

    * This release of Percona Server is distributed with TokuDB storage engine.
    
       * Run the following script to enable the TokuDB storage engine in Percona Server:
    
     
    
        ps_tokudb_admin --enable -u <mysql_admin_user> -p[mysql_admin_pass] [-S <socket>] [-h <host> -P <port>]
    
     
    
       * See http://www.percona.com/doc/percona-server/5.7/tokudb/tokudb_installation.html for more installation details
    
     
    
       * See http://www.percona.com/doc/percona-server/5.7/tokudb/tokudb_intro.html for an introduction to TokuDB
    

    Percona Server实现了ps_tokudb_admin脚本启动TokuDB存储引擎。脚本会自动关闭大页面转化。需要sudo 运行一下语句:

    ps_tokudb_admin --enable -uroot -pPassw0rd
    

    运行后会输出:

    Checking if Percona server is running with jemalloc enabled...
    
    >> Percona server is running with jemalloc enabled.
    
     
    
    Checking transparent huge pages status on the system...
    
    >> Transparent huge pages are currently disabled on the system.
    
     
    
    Checking if thp-setting=never option is already set in config file...
    
    >> Option thp-setting=never is not set in the config file.
    
    >> (needed only if THP is not disabled permanently on the system)
    
     
    
    Checking TokuDB plugin status...
    
    >> TokuDB plugin is not installed.
    
     
    
    Adding thp-setting=never option into /etc/mysql/my.cnf
    
    >> Successfuly added thp-setting=never option into /etc/mysql/my.cnf
    
     
    
    Installing TokuDB engine...
    
    >> Successfuly installed TokuDB plugin.
    

    如果脚本没有返回错误,那么TokuDB被成功安装,可以使用show engins检查:

    mysql> SHOW ENGINES;
    
    ...
    
     | TokuDB | YES | Tokutek TokuDB Storage Engine with Fractal Tree(tm) Technology | YES | YES | YES |
    
    ...
    

     

    手动启动TokuDB存储引擎

    如果你不想用ps_tokudb_admin脚本,就需要手动安装存储引擎,加载plugins:

    INSTALL PLUGIN tokudb SONAME 'ha_tokudb.so';
    
    INSTALL PLUGIN tokudb_file_map SONAME 'ha_tokudb.so';
    
    INSTALL PLUGIN tokudb_fractal_tree_info SONAME 'ha_tokudb.so';
    
    INSTALL PLUGIN tokudb_fractal_tree_block_map SONAME 'ha_tokudb.so';
    
    INSTALL PLUGIN tokudb_trx SONAME 'ha_tokudb.so';
    
    INSTALL PLUGIN tokudb_locks SONAME 'ha_tokudb.so';
    
    INSTALL PLUGIN tokudb_lock_waits SONAME 'ha_tokudb.so';
    
    INSTALL PLUGIN tokudb_background_job_status SONAME 'ha_tokudb.so';
    

    然后获取当前存储引擎列表:

    mysql> SHOW ENGINES;
    
    ...
    
    | TokuDB | YES | Tokutek TokuDB Storage Engine with Fractal Tree(tm) Technology | YES | YES | YES |
    
    ...
    

    然后show plugins检查是否安装正确:

    mysql> SHOW PLUGINS;
    
    ...
    
    | TokuDB                        | ACTIVE   | STORAGE ENGINE     | ha_tokudb.so | GPL     |
    
    | TokuDB_file_map               | ACTIVE   | INFORMATION SCHEMA | ha_tokudb.so | GPL     |
    
    | TokuDB_fractal_tree_info      | ACTIVE   | INFORMATION SCHEMA | ha_tokudb.so | GPL     |
    
    | TokuDB_fractal_tree_block_map | ACTIVE   | INFORMATION SCHEMA | ha_tokudb.so | GPL     |
    
    | TokuDB_trx                    | ACTIVE   | INFORMATION SCHEMA | ha_tokudb.so | GPL     |
    
    | TokuDB_locks                  | ACTIVE   | INFORMATION SCHEMA | ha_tokudb.so | GPL     |
    
    | TokuDB_lock_waits             | ACTIVE   | INFORMATION SCHEMA | ha_tokudb.so | GPL     |
    
    | TokuDB_background_job_status  | ACTIVE   | INFORMATION SCHEMA | ha_tokudb.so | GPL     |
    
    ...
    

     

    TokuDB版本

    查看TokuDB版本:

    mysql> SELECT @@tokudb_version;
    
    +------------------+
    
    | @@tokudb_version |
    
    +------------------+
    
    | 5.7.10-1rc1      |
    
    +------------------+
    
    1 row in set (0.00 sec)
    

    今天在解析Json的多级参数遇到了点小问题,在此记录一下:

    3.  使用TokuDB

    传参内容如下:

    3.1 快速插入和富索引

    TokuDB使用富索引,让更快的索引,可以让查询更快。比如覆盖或者聚集索引。

     

    1 declare @json varchar(max)=N'{"Customer":36,"Positions":[{"ID":0,"Quantity":180000,"Files":[180,177,175,172,170,169,167,164,161,162,159,158,153,152]}]}';
    

    3.2 聚集secondary索引

    TokuDB允许一个secondary索引定义为聚集索引。以为这所有的表上的列都在这个secondary索引上。Percona Server解析并且查询优化的时候支持多聚集键,当TokuDB被使用的时候。也就是说在特定环境下,查询优化器会避免主键聚集索引读取,而是使用secondary 聚集索引读取。

    现在解析式支持一下语法:

    CREATE TABLE ... ( ..., CLUSTERING KEY identifier (column list), ...
    
    CREATE TABLE ... ( ..., UNIQUE CLUSTERING KEY identifier (column list), ...
    
    CREATE TABLE ... ( ..., CLUSTERING UNIQUE KEY identifier (column list), ...
    
    CREATE TABLE ... ( ..., CONSTRAINT identifier UNIQUE CLUSTERING KEY identifier (column list), ...
    
    CREATE TABLE ... ( ..., CONSTRAINT identifier CLUSTERING UNIQUE KEY identifier (column list), ...
    
     
    
    CREATE TABLE ... (... column type CLUSTERING [UNIQUE] [KEY], ...)
    
    CREATE TABLE ... (... column type [UNIQUE] CLUSTERING [KEY], ...)
    
     
    
    ALTER TABLE ..., ADD CLUSTERING INDEX identifier (column list), ...
    
    ALTER TABLE ..., ADD UNIQUE CLUSTERING INDEX identifier (column list), ...
    
    ALTER TABLE ..., ADD CLUSTERING UNIQUE INDEX identifier (column list), ...
    
    ALTER TABLE ..., ADD CONSTRAINT identifier UNIQUE CLUSTERING INDEX identifier (column list), ...
    
    ALTER TABLE ..., ADD CONSTRAINT identifier CLUSTERING UNIQUE INDEX identifier (column list), ...
    
     
    
    CREATE CLUSTERING INDEX identifier ON ...
    

    定义secondary聚集索引:

    CREATE TABLE table (
    
      column_a INT,
    
      column_b INT,
    
      column_c INT,
    
      PRIMARY KEY index_a (column_a),
    
      CLUSTERING KEY index_b (column_b)) ENGINE = TokuDB;
    

    TokuDB可以使用聚集索引是因为它出色的压缩和很高的索引率。

     

    想解析出Positions里面的Files,但是一直报错,或者NULL。

    3.3 在线索引创建

    TokuDB可以让你在线的添加索引到已经存在的表中。不是使用online 关键字,还是使用tokudb_create_index_online的会话系统变量:

    mysql> SET tokudb_create_index_online=on;
    
    Query OK, 0 rows affected (0.00 sec)
    
     
    
    mysql> CREATE INDEX index ON table (field_name);
    

    也可以使用,alter table命令离线方式的创建索引,不管有没有开启tokudb_create_index_online都是离线的。只有create index方式可以在线的创建。

    Online创建索引比offline 的满,和服务繁忙程度有关。创建索引的精度可以通过命令show processlist查看。一旦索引创建完成,新的索引在下个查询计划中就会被使用。

    如果在同一个表上有多余一个的创建索引,索引会线性的被创建。索引创建会等待另外一个完成,在show processlist中会显示被锁定。推荐在创建索引完成之后再来执行下一个。

     

    查询文档,发现这种解析需要制定的字段类型,并准成json才行。

    3.4 在线添加,删除,扩展,重命名列

    TokuDB可以让你添加和删除已经存在表的列,扩展char,varchar,varbinary,integer类型,或者重命名已经存在的列。HCADER会短暂的锁定表,修改数据字段。然后当数据从磁盘读入的时候都会被修改。对于列重命名,所有的工作在几秒钟内完成,在磁盘上的数据不会被修改。

    获取HCADER的好性能,的几点:

    Ÿ   添加,删除或者扩展操作的后续会被认为是fractal tree的一部分。
    可以使用optimize table x来一次性处理,optimize table并不会重建索引,但是会诱发HCADER的运行。

    Ÿ   每个HCADER必须独立的运行。如果想要增删改多个列,那么就写多个语句。

    Ÿ   避免HCADER和在线索引操作一起处理。

    Ÿ   表锁的事件有所不同,HCADER的锁定事件是脏数据刷新的事件,因为mysql会在alter table之后关闭。如果最近发生过检查点,那么操作就会很快。如果有太多的脏数据,那么刷新事件可能会很长。

    Ÿ   避免删除的列是索引的一部分。如果列是索引的一部分,那么删除会很慢。

    Ÿ   在线扩展只支持char,varchar,varbinary和integer。如果字段是主键或者任何secondary索引的一部分也不支持。

    Ÿ   重命名只能是一句一个列。

    注意所有的列属性必须制定,alter table change可能会很慢:

    Ÿ   在线列重命名不支持以下字段,time,enum,blob,tinyblob,mediumblob,longblob。这些列的重命名会走标准的流程。

    Ÿ   临时表不能使用HCADER。

     

    解析的SQL Script如下:

    3.5    压缩细节

    TokuDB提供不同级别的压缩,是cpu和压缩率之间的一些平衡。标准的压缩使用少量的cpu但是压缩级别也比较低,高级别的压缩比较消耗cpu。

    TokuDB压缩发生在后台线程,表示高压缩率并不会延迟数据库。事实上,在某些某些情况下,压缩率越高性能越好。

    注意:

           一般在6核一下的推荐标准的压缩,6核以上的推荐高压缩

    压缩率的选择还是取决于数据库的时候,推荐使用默认配置。

    压缩在create table,alter table的基于每张表设置行格式:

    CREATE TABLE table (

      column_a INT NOT NULL PRIMARY KEY,

      column_b INT NOT NULL) ENGINE=TokuDB

      ROW_FORMAT=row_format;

     
    

    如果在create table 的时候没有设置行格式,那么是怎么压缩看tokudb_row_format的设置。如果没有设置tokudb_row_format,那么压缩就使用zlib。

    Row_format和tokudb_row_format取值如下:

    ·         TOKUDB_DEFUALT:以默认方式压缩。在TokuDB 7.1,默认的使用zlib进行压缩,之后可能会改。

    ·         TOKUDB_FAST:这个设置使用quicklz压缩。

    ·         TOKUDB_SMALL:使用lzma进行压缩。

    另外也可以直接选择压缩库,可用的压缩库:

    ·         TOKUDB_ZLIB:使用zlib进行压缩,提供中等的压缩和cpu使用率

    ·         TOKUDB_QUICKLZ:使用quicklz进行压缩,提供轻量级的压缩和低cpu使用率。

    ·         TOKUDB_LZMA:使用lzma进行压缩,提供最高的压缩和cpu使用率。

    ·         TOKUDB_SNAPPY:使用snappy进行压缩,合理的高速的压缩。

    ·         TOKUDB_UNCOMPRESSED:这个设置关闭了压缩,并且表不会被压缩。

    1 select    ID, Quantity, FileID=f.value
    2 from    openjson (@json, '$.Positions')
    3 with (
    4     ID int, 
    5     Quantity int,
    6     Files nvarchar(max) '$.Files' as json
    7 ) x
    8 cross    apply openjson(x.Files, '$') f
    

    3.6 修改表的压缩

    修改表的压缩语法如下:

    ALTER TABLE table

      ROW_FORMAT=row_format;

    注意:

           修改表偶的压缩至会影响性写入的数据。修改表压缩之后可以通过OPTIMZE TABLE把所有的block全部写一遍。

    *注:其中第6行的写法是固定的:字段类型及后面的。

    3.7 无io读复制

    TokuDB slave可以配置,让来自master修改可以最小化。通过记录fractal tree索引:

    ·         Insert/update/delete操作可以控制取消read-modify-write的行为,然后注入消息到合适的fractal tree。

    ·         Update/delete操作可以配置取消需要io的一致性检查。

    为了使用使用无io读复制,服务需要配置:

    ·         在replication master:

    o    设置为binlog行模式:BINLOG_FORMAT=ROW

    ·         在replication slave:

    o    Slave必须为只读:read_only=1

    o    取消一致性检查:tokudb_rpl_unique_checks=0

    o    关闭查找(read-modify-write) :tokudb_rpl_lookup_rows=0

    可以在一个或者多个slave上配置。只要master使用了基于行的复制,优化在tokudb slave就可用。也就是说如果master使用innodb或者myisam表也是可用的。

     

    3.8 事务和ACID兼容恢复

    默认,Tokudb检查所有检查点之间的打开的表和日志的修改,所以在系统崩溃的,Tokudb会恢复所有的表大ACID兼容状态。所有的提交事务都会被反应在表上,并且没有提交的事务都会被回滚。

    默认检查点60秒执行一次,如果检查点需要更多的执行,那么下一个检查点会马上执行。这个和日志文件截断的频率有关。用户可以使用flush logs命令执行检查点。当数据库关闭会执行检查点并且取消所有的感慨事务。日志在重启的时候被截断。

    3.9 管理Log大小

    TokuDB保证日志文件能够会到最后一次检查点。当日志文件到达100MB,就会启动一个新的文件。不管是否有检查点,所有的日志文件比checkpoint老的都会被丢弃。如果检查点时间被设置了很大的值,log的截断频率会减少。默认这个值为60s。

    TokuDB为每个打开的事务保存了回滚日志,每个log的文件大小和事务的任务和被压缩保存到磁盘的大小有关。回滚日志在相关事务完成后会被截断。

     

    3.10 恢复

    恢复是自动的,TokuDB使用日志文件,和回滚日志来恢复。恢复的时间和和日志文件的大小和未压缩回滚日志大小有关。因此如果没有长时间运行的事务,那么恢复过程是很快的。

     

    3.11 关闭写缓存

    但是用任何事务安全的数据库,都假设在你了解硬件的写缓存的基础上。TokuDB提供事务安全的存储引擎。如果写入磁盘的行文,操作系统或者硬件没有真正的写入到磁盘,那么crash之后会损坏。

    这个时候需要关闭写缓存,在ATA/SATA上使用以下命令:

    $ hdparm -W0 /dev/hda

    在某些情况下可以使用写缓存:

    ·         写缓存可以在xfs上,并且保证电池工作正常的情况下使用。如果在/var/log /messages上出现以下信息就不能使用写缓存:

    o    Disabling barriers, not supported with external log device

    o    Disabling barriers, not supported by the underlying device

    o    Disabling barriers, trial barrier write failed

    以下情况就必须关闭写缓存:

    ·         如果你使用了ext3文件系统

    ·         如果使用了LVM

    ·         如果你使用了软的RAID

    ·         如果使用了RAID有battery-backed-up memory

     

    本文由金沙国际官网发布于数据库,转载请注明出处:2017中使用json传参时解析遇到的多层解析问题,将

    关键词:

上一篇:没有了

下一篇:没有了