技术头条(投递你的文章)     搜索本站     邮件订阅     微信号:IT技术博客大学习
您现在的位置首页 --> MySQL
    【导读】 MySQL数据库提供针对字符串存储的一种特殊数据类型:集合类型SET,这种数据类型可以给予我们更多提高性能、降低存储容量和降低程序代码理解的技巧,前面介绍了首先介绍了四种数据类型的特性总结,其后又分别介绍了布尔类型BOOL或称布尔类型BOOLEAN、枚举类型ENUM,本文我们详细介绍集合类型set测试过程与总结,加深对mysql数据库集合类型set的理解记忆。
    【导读】 MySQL数据库四种数据类型:布尔类型、微整型、枚举类型和集合类型,都逐一分析这四种数据类型的特性,以及针对每种数据类型做相应的深入分析和案例测试,挖掘出MySQL手册没有详细写清楚的部分,相关技术文章可以考虑从数据类型系列第一篇文章MySQL数据库数据类型之ENUM、SET、BOOL/BOOLEAN、TINYINT特性介绍开始阅读。 本文内容属于基于在此之前分享的6篇关于四种数据类型的文章之上,我们结合实际的业务场景和生产环境维护成本等多个角度进行分析,阐述什么样的业务场景,适合使用布尔类型、枚举类型和集合类型?使用这三种数据类型之后,又回给我们带来哪些麻烦?如何规避这三种数据类型带来的弊端等问题,将会逐一解答。
     【导读】 针对四种数据类型:布尔类型BOOL或称布尔类型BOOLEAN、微整型TINYTINT、枚举类型ENUM、集合类型SET,我们已经分多篇文章篇幅给出详细的介绍与功能测试数据,接下来我们深入介绍枚举类型EUNM和集合类型SET。测试基于InnoDB存储引擎上,对MySQL数据库集合类型SET的字段进行DDL变更操作,是否需要重新创建表呢?对数据库的事务处理有何影响?对数据库的数据服务提供有何性能影响?
    数据库范式是DBA必知必会的知识,但是很多半路出家的DBA确往往忽略了这部分知识。eugene面试问应聘者时,爱问int(n)、varchar(n)这里N代表的含义,如果我面试应聘者,我肯定会问范式的相关问题。 为了不难住大家,下面我以一个game dba的角度给大家简单分享下我对范式的认识。
    【导读】 MySQL数据库产品提供了二种比较特殊的数据类型: SET(集合类型)、ENUM(枚举类型)、BOOL/BOOLEAN(布尔类型),而多数开发人员,甚至DBA从业者对如何使用这三种数据类型的应用场景并不十分清晰,为此结合TINYINT数据类型对比,让我们大家一起弄清楚。
    【导读】 针对四种数据类型:布尔类型BOOL或称布尔类型BOOLEAN、微整型TINYTINT、枚举类型ENUM、集合类型SET,我们已经分多篇文章篇幅给出详细的介绍与功能测试数据,接下来我们深入介绍枚举类型EUNM和集合类型SET。测试基于InnoDB存储引擎上,对MySQL数据库集合类型SET和枚举类型ENUM的字段进行DDL变更操作,是否需要重新创建表呢?对数据库的事务处理有何影响?对数据库的数据服务提供有何性能影响?
    使用TDH_SOCKET进行插入能到这么高TPS的关键:
  • TDH_SOCKET提供group commit:
  • 减少redo log的fsync次数,使IOPS不成为瓶颈
  • TDH_SOCKET能提供并发写.
  • 自增id的生成策略需要分段自增:
  • 如果采用全自增id生成策略(即默认innodb提供的自增id生成策略)的话,会在高并发插入的时候遇到一个block的写锁.
  • 因为是顺序自增,所以并发插入的记录都会集中写入到同一个page上,而一个线程写page会对这个page做一次rw_lock_x_lock_func(&(block->lock), 0, file, line); 那么这个写锁会成为瓶颈,使TPS无法上去所以只要改变生成id的策略:
  • 分段自增比如一个写线程一下子获取1-10000的id范围 下一个写线程获取10001-20000的id范围..
  • 每个写线程在各自的范围里面自增的生成id,那么即能保证一定的顺序写,又能使写page不会因为并发写锁而性能下降!
  •     针对四种数据类型:布尔类型BOOL或称布尔类型BOOLEAN、微整型TINYTINT、枚举类型ENUM、集合类型SET,我们已经分多篇文章篇幅给出详细的介绍与功能测试数据,接下来我们深入介绍枚举类型EUNM和集合类型SET。测试基于InnoDB存储引擎上,对MySQL数据库枚举类型ENUM的字段进行DDL变更操作,是否需要重新创建表呢?对数据库的事务处理有何影响?对数据库的数据服务提供有何性能影响?
        本文从实际使用经验出发,介绍一款开源的MySQL数据库InnoDB数据恢复工具:innodb-tools,它通过从原始数据文件中提取表的行记录,实现从丢失的或者被毁坏的MySQL表中恢复数据。例如,当你不小心执行DROP TABLE、TRUNCATE TABLE或者DROP DATABASE之后,可以通过以下方式恢复数据。 以下内容大部分参考自:Percona Data Recovery Tool for InnoDB,文档是英文的,而且写的比较晦涩,这里是个人的实战经验总结,供大家参考学习。
        一个朋友有这样一个SQL查询需求: 有一个登录表(tmp_test),包含用户ID(uid)和登录时间(login_time)。
        大家有没有接触过这样的需求,采集历史数据库中或者其他数据库中的某些信息,这些信息是另一个服务器需要执行sql的条件。通常我们的处理手段是把这个信息通过sql找出来或导出,然后使用脚本或者手工拼凑新的新的sql语句。在很多紧急情况下(产品bug、数据错乱)会产生这样的需求,这个时候处理的是在线数据库,不能有一点马虎、如果数据量稍微大一点,DBA们就够焦头烂额了。我之前也多次遇见这种情况,我把一些经验介绍给大家。 其实这种情况下使用concat+out file会得到事半功倍的效果。 比如我们需要找到user表中昨天登录过的用户,然后修改修改他们的garbage中某个物品的属性。
        mysql 的主从同步挂了,从日志中报的错如下: 120309 18:39:23 [Note] Slave SQL thread initialized, starting replication in log 'mysql-bin.000004' at position 2207467...
        今天遇到一个奇怪的问题,明明已经建立了索引,select语句的explain也表明会利用这个索引,可是结果偏偏没有用索引,最后扫描了全表。 两个结构完全一样的sql语句: sql1: select * from table where col_a = 123 and col_b in (‘foo’,\'bar’) order by id desc; sql2: select * from table where col_a = 456 and col_b in (‘foo’,\'bar’) order by id desc; 结果sql1选择利用了col_a的索引,速度很快,sql2利用了主键ID的索引,扫描了全表(40w行)。 仔细分析,发现数据库中,col_a=456的记录数有近1万条,而col_a=123的记录数
        在 MySQL5.1.6 起,增加了一个不错的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务,来取代原先只能由操作系统的计划任务来执行的工作。更值得 一提的是MySQL的事件调度...
        高并发地进行insert经常导致阻塞很长时间。 有些场景下我们并不需要知道insert之后的结果。因此可以采用insert delayed方法。 insert delayed是myisam对与sql标准的扩展,在innodb引擎下并不支持。 insert delayed之后,系统会立刻返回结果,使用last_inserted_id方法不能获得insert delayed得到的主键ID
        直到今天为止,MySQL依然只支持一个Slave从一个Master复制数据,虽然也可以做到一主多备(M->S),双主复制(MM)等架构,但是局限性依然很大。 例如最近我们遇到一个问题,需要为线上的集群搭建在线延时备份,即从线上的双主集群中再延伸出一组Slave,以防重要集群主备都宕机。按照现在MySQL的架构,要搭建这种在线备份,只能启动相同数据的实例来实现,假设线上有128个实例在提供服务,那么我就需要128个实例来做这128个实例的复制,这个管理成本是巨大的。 之前我们也有个方案,利用Perl脚本来做,参见这篇文章:点我阅读。这个方案的最大问题就是管理不方便,没有可以监控的地方,也不能随便停止脚本等等,如果完善这些部分,代码量太大,几乎就实现了一个MySQL Replication,那还不如利用MySQL的管理部分,在MySQL里实现多Master。
        此篇文章主要介绍的是MySQL数据库实际应用方面的操作。但是你必须要先登录到 MySQL数据库中,下面的操作是在MySQL数据库的实际提示符之下进行的,同时也要求每个相关命令以分号结束。 一、操作技巧 1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。 也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就OK。 2、你可以使用光标上下键调出以前的命令。 二、显示命令 1、显示当前MySQL数据库服务器中的数据库列表: MySQL> SHOW DATABASES; 注意:MySQL库里面有MySQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。 2、显示MySQL数据库中的数据表: MySQL> USE 库名; MySQL> SHOW TABLES; 3、显示数据表的结构: MySQL> DE
         MySQL数据库外部XA可以用在分布式数据库代理层,实现对MySQL数据库的分布式事务支持,例如开源的代理工具:ameoba[4],网易的DDB,淘宝的TDDL,B2B的Cobar等等。
         MySQL XA分为两类,内部XA与外部XA;内部XA用于同一实例下跨多个引擎的事务,由大家熟悉的Binlog作为协调者;外部XA用于跨多MySQL实例的分布式事务,需要应用层介入作为协调者(崩溃时的悬挂事务,全局提交还是回滚,需要由应用层决定,对应用层的实现要求较高).
        用HandlerSocket大量并发插入数据到多个InnoDB的表(都使用自增id)的时候就会大量出现167的错误,从而TPS下降极为厉害.
    [共517篇文章][第8页/共26页][|<][4][5][6][7][8][9][10][11][12][13][>|]
    赞助商广告
    © 2009 - 2017 by blogread.cn 微博:@IT技术博客大学习

    京ICP备15002552号