Home > 数据存储
  • 【分享】我必须得告诉大家的MySQL优化原理

    说起MySQL的查询优化,相信大家收藏了一堆奇技淫巧:不能使用SELECT *、不使用NULL字段、合理创建索引、为字段选择合适的数据类型..... 你是否真的理解这些优化技巧?是否理解其背后的工作原理?在实际场景下性能真有提升吗?我想未必。因而理解这些优化建议背后的原理就尤为重要,希望本文能让你重新审视这些优化建议,并在实际业务场景下合理的运用。 MySQL逻辑架构 如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器。下图展示了MySQL的逻辑架构图。   MySQL逻辑架...
    阅读全文 →
  • 【分享】如何知道mysql中sql语句索引是否生效

    通常我们使用explain 命令来检验sql语句执行状况:   mysql> explain select * from a; +----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+ | 1 | SIMPLE | t3 | const | PRIMARY,idx_t3_id | PRIMARY | 4 | const | 1 | | +----+-------------+----...
    阅读全文 →
  • 【分享】Mysql分区表的管理与维护

    改变一个表的分区方案只需使用alter table 加 partition_options 子句就可以了。和创建分区表时的create table语句很像 创建分区表: CREATE TABLE trb3 ( id INT, name VARCHAR(50), purchased DATE) PARTITION BY RANGE( YEAR(purchased) ) ( PARTITION p0 VALUES LESS THAN (1990), PARTITION p1 VALUES LESS THAN (1995), PARTITION p2 VALUES LESS THAN (2000), PARTITION p3 VALUES LESS THAN (2005) ); 创建插入数据存储过程: delimiter $$ drop procedure if exists pr_trb3$$ create procedure pr_trb3...
    阅读全文 →
  • 【案例】MySQL5.6分区数量太多引发的血案

    一个月之前,Scott和同事们发现公司有一个MySQL MHA集群的master(假设master机器名为hostA)每隔一周左右就会挂一次(指MySQL挂掉),在几周内,MHA来回切了好几次。 按照国际惯例,Scott按照如下顺序去查问题到底出在哪里: (1)先翻MySQL error log,没有发现异常 (2)再翻Linux系统日志文件,果然,翻到了下面的内容: Nov 26 13:05:38 hostA kernel: mysql invoked oom-killer: gfp_mask=0x280da, order=0, oom_adj=0, oom_score_adj=0 ...此处内容省略N行... Nov 26 13:05:38 hostA kernel: Out of ...
    阅读全文 →
  • 【分享】Mysql分区表使用的一些限制和需要注意的细节

    mysql分区策略都基于两个非常重要的假设:查询都能够过滤(prunning)掉很多额外的分区、分区本身并不会带来很多额外的代价。而事实证明,这两个假设在某些场景下会有问题。下面介绍一些可能会遇到的问题。 NULL位会使分区过滤无效 关于分区表一个容易让人误解的地方就是分区的表达式的值可以是NULL:第一个分区是一个特殊分区。假设按照PARTITION BY     RANGE YEAR(order_date)分区,那么所有order_date为NULL或者是一个非法值的时候,记录都会被存放到第一个分区。现在假设有   下面的查询:WHERE order_date B...
    阅读全文 →
  • 【分享】MySQL 分表和分区原理及应用方法详解

    摘星怪  /
     / 数据存储
    日常开发中课课家经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表。这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能会更加糟糕。分表和表分区的目的就是减少数据库的负担,提高数据库的效率,通常点来讲就是提高表的增删改查效率。 1. 什么是什么是分表和分区? 有什么区别和联系? 1.1 分表 分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,每个表都对应三个文件,MYD数据文件,.MYI索引文件,.frm表结构文件。这些...
    阅读全文 →
  • 【分享】Mysql分区举例—基于时间字段进行分区的方案

    摘星怪  /
     / 数据存储
    MySQL支持的分区类型一共有四种:RANGE,LIST,HASH,KEY。其中,RANGE又可分为原生RANGE和RANGE COLUMNS,LIST分为原生LIST和LIST COLUMNS,HASH分为原生HASH和LINEAR HASH,KEY包含原生KEY和LINEAR HASH。关于这些分区之间的差别,改日另写文章进行阐述。 最近,碰到一个需求,要对表的时间字段(类型:datetime)基于天进行分区。于是遍历MySQL官方文档分区章节,总结如下: 实现方式 主要是以下几种: 1. 基于RANGE 2. 基于RANGE COLUMNS 3. 基于HASH 测试数据 为了测试以上三种方案,特构造了100万的测试数...
    阅读全文 →
  • 【分享】记住,永远不要在MySQL中使用“utf8”编码

    最近工作中我遇到了一个 bug,我试着通过 Rails 在以“utf8”编码的 MariaDB 中保存一个 UTF-8 字符串,然后出现了一个离奇的错误: Incorrect string value: ‘\xF0\x9F\x98\x83 <…’ for column ‘summary’ at row 1 我用的是 UTF-8 编码的客户端,服务器也是 UTF-8 编码的,数据库也是,就连要保存的这个字符串“😃 <…”也是合法的 UTF-8。 问题的症结在于,MySQL 的“utf8”实际上不是真正的 UTF-8。 “utf8”只支持每个字符三个字节,而真正的 UTF-8 是每个字符最多四字节 MySQL 一直没有修复这个 bug,他...
    阅读全文 →
  • MySQL ”Innodb_buffer_pool_siz “缓存参数优化总结

    无论是对于哪一种数据库来说,缓存技术都是提高数据库性能的关键技术,物理磁盘的访问速度永 远都会与内存的访问速度永远都不是一个数量级的。通过缓存技术无论是在读还是写方面都可以大大提 高数据库整体性能。   注意:在MySQL  5.5 、5.6 等以前的版本里,调整innodb_buffer_pool_size大小必须重启mysql进程才可以生效,而在MySQL  5.7 版本里,可以直接动态设置,但是在调整Buffer_Pool期间,用户的请求会阻塞,直到调整完毕,所以请勿业务高峰期调整,可选择在业务低峰期调整。 Innodb_buffer_pool_size 的合...
    阅读全文 →
  • 【分享】MySQL报ERROR : (2006, ‘MySQL server has gone away’)的问题

    mysql出现ERROR : (2006, 'MySQL server has gone away') 的问题意思就是指client和MySQL server之间的链接断开了。 造成这样的原因一般是sql操作的时间过长,或者是传送的数据太大(例如使用insert ... values的语句过长, 这种情况可以通过修改max_allowed_packed的配置参数来避免,也可以在程序中将数据分批插入)。 产生这个问题的原因有很多,总结下网上的分析: 原因一. MySQL 服务宕了 判断是否属于这个原因的方法很简单,进入mysql控制台,查看mysql的运行时长 mysql> show global status like 'uptime';...
    阅读全文 →
  • 【分享】MySQL (2013, ‘Lost connection to MySQL server during query’)问题详解

    MySQL 在线上的一个新的部署的服务中报: pymysql.err.OperationalError (2013, 'Lost connection to MySQL server during query') 翻阅官方文档解释了这么几种可能性问题,详见:https://dev.mysql.com/doc/refman/5.7/en/error-lost-connection.html 连接 MySQL 服务的网络有问题 网络问题会导致 MySQL 的 connection 无故断掉,会报这个错误,所以首先检查 client 服务到 MySQL 服务是不是延迟很高。 读取或写入很多行数据,导致数据传输超时 MySQL net_read_timeout 和 net_write_timeout 控制一次连接传...
    阅读全文 →
  • 【分享】Mysql 5.7.20 show tables;能看到表,操作表却说表不存在

    状况描述: 早上上班后,mysql服务器遇到点小问题,在排查故障过程查看mysql错误日志过程中发现有几个innodb 表无法打开,使用desc查看有关表的表结构提示表不存在,show tables 可以查到一下五个表,以下是具体的报错信息: 2018-01-12 09:17:41 17235 [Warning] InnoDB: Cannot open table mysql/innodb_index_stats from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve...
    阅读全文 →
  • 【分享】MySQL数据库INNODB表损坏修复处理过程分享

    状况描述: 突然收到MySQL报警,从库的数据库挂了,一直在不停的重启,打开错误日志,发现有张表坏了。innodb表损坏不能通过repair table 等修复myisam的命令操作。现在记录下解决过程,下次遇到就不会这么手忙脚乱了。 处理过程: 一遇到报警之后,直接打开错误日志,里面的信息: InnoDB: Database page corruption on disk or a failed InnoDB: file read of page 30506. InnoDB: You may have to recover from a backup. 130509 20:33:48 InnoDB: Page dump in ascii and hex (16384 bytes): ##很多十六进制的...
    阅读全文 →
  • 【分享】100+个MySQL调试和优化技巧

    MySQL是一个功能强大的开源数据库。随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限。这里是101条调节和优化MySQL安装的技巧。一些技巧是针对特定的安装环境的,但这些思路是通用的。我已经把他们分成几类,来帮助你掌握更多MySQL的调节和优化技巧。 MySQL 服务器硬件和操作系统调节 拥有足够的物理内存来把整个InnoDB文件加载到内存中——在内存中访问文件时的速度要比在硬盘中访问时快的多。 不惜一切代价避免使用Swap交换分区 – 交换时是从硬盘读取的,它的速度很慢。 使用电池供电的RA...
    阅读全文 →
  • 【分享】10个最经典的 MySQL 数据库运维实战案例

    摘星怪  /
     / 数据存储
        今天就给大家列举 MySQL 数据库中最经典的十大错误案例,并附有处理问题的解决思路和方法。希望能给刚入行或数据库爱好者一些帮助,今后再遇到任何报错,我们都可以很淡定地去处理。     学习任何一门技术的同时,其实就是自我修炼的过程。沉下心,尝试去拥抱数据的世界! 案例一:Too many connections(连接数过多,导致连接不上数据库,业务无法正常进行) 问题还原: mysql> show variables like ‘%max_connection%’; | Variable_name   | Value | max_connections | 151   | ...
    阅读全文 →
  • 【工作】Centos下静默(命令行)方式安装Oracle 11g

    【准备环境】 一般来说,对于生成环境运行的linux系统,都不会安装图形界面,所以如果想要在没有图形界面的Linux上面安装Oracle,我们需要使用Linux的静默安装方式,以下为所需资源: 硬件需求: 物理内存不少于1G 硬盘空间不少于5G swap分区空间不少于2G 软件需求: OS:CentOS release 6.8 Oracle:11gR2 【安装步骤】 --------------------------------------以下命令使用root用户操作-------------------------------------- 1. 下载地址: # wget http://v.yingsun.net/cobra/download/linux.x64_11gR2_...
    阅读全文 →
  • 【案例】云智慧:如何进行PB级别数据的架构变迁

    随着DT时代的来临,数据对于企业经营决策的价值日益凸显,而企业在进行互联网+转型的过程中,如何让数据架构平滑迁移到大数据平台,对于传统业务的转型升级至关重要。企业IT部门该如何进行PB级别大数据平台的迁移规划呢,请看云智慧运维总监张克琛带来的经验分享。 提到PB级别的大数据解决方案市面上有很多,比较火的有Hadoop、Spark、Kafka等等,如果是一个新上线的系统,相信大家都能找到适合自己的方案。但“大数据”在09年才逐渐成为互联网信息技术的流行词汇,一个较老的系统如何平滑迁移到PB级数据架构呢? 云...
    阅读全文 →
  • 【分享】线上环境到底要不要开启query cache

    【文章内容】 Query Cache(查询缓存,以下简称QC)存储SELECT语句及其产生的数据结果,特别适用于:频繁提交同一个语句,并且该表数据变化不是很频繁的场景,例如一些静态页面,或者页面中的某块不经常发生变化的信息。QC有可能会从InnoDB Buffer Pool或者MyISAM key buffer里读取结果。 由于QC需要缓存最新数据结果,因此表数据发生任何变化(INSERT、UPDATE、DELETE或其他可能产生数据变化的操作),都会导致QC被刷新。 根据MySQL官方的测试,QC的优劣分别是: 1、如果对一个表执行简单的查询,但每次查询都不...
    阅读全文 →
  • 【分享】Redis性能问题排查解决思路

    写在前面: 网上看到的一篇关于 Redis性能问题排查的文章,感觉受益匪浅,文章是作者翻译的一个英文电子书其中一篇,推荐有需要了解Redis方面知识的人看下,尤其是Redis方面的运维工程师。 阅读目录: 性能相关的数据指标 内存使用率used_memory 命令处理总数total_commands_processed 延迟时间 内存碎片率 回收key 总结 性能相关的数据指标 通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息。通过这些信息来分析文章后面提到的一些性能指标。 info命令输出的数据可...
    阅读全文 →