MyISAM

如何去写一手好SQL

霸气de小男生 提交于 2021-02-13 17:22:30
MySQL性能 最大数据量 抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。 《阿里巴巴Java开发手册》提出单表行数超过500万行或者单表容量超过2GB,才推荐分库分表。性能由综合因素决定,抛开业务复杂度,影响程度依次是硬件配置、MySQL配置、数据表设计、索引优化。500万这个值仅供参考,并非铁律。 博主曾经操作过超过4亿行数据的单表,分页查询最新的20条记录耗时0.6秒,SQL语句大致是 select field_1,field_2 from table where id < #{prePageMinId} order by id desc limit 20 ,prePageMinId是上一页数据记录的最小ID。 虽然当时查询速度还凑合,随着数据不断增长,有朝一日必定不堪重负。分库分表是个周期长而风险高的大活儿,应该尽可能在当前结构上优化,比如升级硬件、迁移历史数据等等,实在没辙了再分。对分库分表感兴趣的同学可以阅读分库分表的基本思想。 最大并发数 并发数是指同一时刻数据库能处理多少个请求,由max_connections和max_user_connections决定。max_connections是指MySQL实例的最大连接数,上限值是16384,max_user_connections是指每个数据库用户的最大连接数

Mysql中的行级锁、表级锁、页级锁

最后都变了- 提交于 2021-02-13 15:30:20
在DBMS中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引擎)、表级锁(MYISAM引擎)和页级锁(BDB引擎 )。 行级锁 行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但加锁的开销也最大。行级锁分为 共享锁 和 排他锁 。 特点 开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 共享锁(S锁):共享 (S) 用于不更改或不更新数据的操作(只读操作),如 SELECT 语句。 如果事务T对数据A加上共享锁,则其他事务只能对A再加共享锁,不能加排它锁。只有事务T可以对A进行读取和修改,其他事务只能读取数据而不能修改数据。 共享锁(S):SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE 排他锁(X锁):用于数据修改操作,例如 INSERT、UPDATE 或 DELETE。确保不会同时同一资源进行多重更新。 如果事务T对数据A加上排它锁,只有事务T可以对A进行读取和修改,其他任何事务都不能对A进行读取和修改。 排他锁(X):SELECT * FROM table_name WHERE ... FOR UPDATE 表级锁 表级锁是MySQL中锁定粒度最大的一种锁,表示对当前操作的整张表加锁,它实现简单,资源消耗较少

面试命中率90%的点——MySQL锁

醉酒当歌 提交于 2021-02-11 20:31:24
一、对MySQL的锁的了解 当数据库有并发事务的时候,可能会产生数据的不一致,这时候需要一些机制来保证访问的次序,锁机制就是这样的一个机制。 就像酒店的房间,如果大家随意进出,就会出现多人抢夺同一个房间的情况,而在房间上装上锁,申请到钥匙的人才可以入住并且将房间锁起来,其他人只有等他使用完毕才可以再次使用。 二、隔离级别与锁的关系 在Read Uncommitted级别下,读取数据不需要加共享锁,这样就不会跟被修改的数据上的排他锁冲突 在Read Committed级别下,读操作需要加共享锁,但是在语句执行完以后释放共享锁。 在Repeatable Read级别下,读操作需要加共享锁,但是在事务提交之前并不释放共享锁,也就是必须等待事务执行完毕以后才释放共享锁。 SERIALIZABLE 是限制性最强的隔离级别,因为该级别锁定整个范围的键,并一直持有锁,直到事务完成。 三、按照锁的粒度分数据库锁有哪些? 锁机制与InnoDB锁算法 在关系型数据库中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引擎)、表级锁(MYISAM引擎)和页级锁(BDB引擎 )。 MyISAM和InnoDB存储引擎使用的锁: MyISAM采用表级锁(table-level locking)。 InnoDB支持行级锁(row-level locking)和表级锁,默认为行级锁。 行级锁,表级锁和页级锁对比

PHP 面试知识点整理归纳

我的未来我决定 提交于 2021-02-11 13:10:04
这里是我精选出来的内容,原文地址: https://blog.csdn.net/l269798518/article/details/82428601 isset 和 empty isset 用来判断变量是否存在; empty 用来判断变量是否有值 。 $a 不存在和 $a = null 两种情况在 isset 看来为 true ,其余为 false (包括 $a = ‘’ ; ) $a = null, 0, false, ‘ ’ , 或不存在时在 empty 看来为 true ,其余为 false 。 private 、 protected 、 public 、 final 区别 public: 权限是最大的,可以内部调用,实例调用等。 protected: 受保护类型,用于本类和继承此类的子类调用。 private: 私有类型,只有在本类中使用。 static :静态资源,可以被子类继承。 abstract :修饰抽象方法,没有方法体,由继承该类的子类来实现。 final :表示该变量、该方法已经 “ 完成 ” ,不可被覆盖。修饰类时该类不能被继承。 (因此 final 和 abstract 不能同时出现) 抽象类、接口 接口通常是为了抽象一种行为,接口是一种规范,在设计上的意义是为了功能模块间的解耦,方便后面的功能扩展、维护,接口不能有具体的方法 ; 抽象类可以有具体的方法

Row size too large (> 8126) can i just change InnoDB to MyISAM

走远了吗. 提交于 2021-02-11 06:25:38
问题 I have this error: Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. To solve this can i just change InnoDB to MyISAM? 回答1: Yes, you could switch to MyISAM. But that is not necessarily a good idea: MyISAM does not support transactions MyISAM tables often need REPAIR after a crash An InnoDB table can handle more than 8KB per row. Apparently you ran

Row size too large (> 8126) can i just change InnoDB to MyISAM

戏子无情 提交于 2021-02-11 06:25:22
问题 I have this error: Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. To solve this can i just change InnoDB to MyISAM? 回答1: Yes, you could switch to MyISAM. But that is not necessarily a good idea: MyISAM does not support transactions MyISAM tables often need REPAIR after a crash An InnoDB table can handle more than 8KB per row. Apparently you ran

【Database】MySQL实战45讲

。_饼干妹妹 提交于 2021-02-09 20:29:57
01 | 基础架构:一条SQL查询语句是如何执行的? 1. MySQL 的基本架构图: MySQL可以分成: Server层 和 存储引擎层 两部分。 Server层:包含连接器、查询缓存、分析器、优化器、执行器等等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(日期,时间,数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程,触发器,视图等。 存储引擎层:负责数据的存储和提取,架构模式是插件式的,支持 InnoDB(默认的存储引擎) , MyISAM, Memory 等多个存储引擎。 【1】连接器 连接器负责和客户端建立连接,获取权限,维持和管理连接。 mysql -h$ip -P$port -u$user -p 连接器要和服务端建立连接。 (1)TCP握手 (2)认证user身份 (3)去权限表里面查询user拥有的权限。(此后这个连接里面的权限判断逻辑,都将依赖于此时读到的权限) 这就意味着,一个用户建立成功连接之后,即使你用管理员账号对这个用户的权限做了修改,也不会影响到已经存在连接的权限。 修改完成之后,只有再新建的连接才会使用新的权限设置。 MySQL查看现在所有的连接: mysql> show processlist; command 列的 Sleep 状态表示现在系统里面有一个空闲连接。 客户端如果太长时间没有动静

MySQL 之mydumper安装详解

南楼画角 提交于 2021-02-08 14:31:45
方法一: 安装依赖包: 1 yum install glib2-devel mysql-devel zlib-devel pcre-devel openssl-devel cmake make 下载二进制包: 1 wget https: //launchpadlibrarian.net/225370879/mydumper-0.9.1.tar.gz 解压安装: 1 2 3 4 tar zxvf mydumper-0.9.1.tar.gz cd mydumper-0.9.1/ cmake . make && make install 安装完成后生成两个二进制文件mydumper和myloader位于/usr/local/bin目录下 查看是否正常: 1 mydumper --help 方法二: 安装 1 安装依赖包 yum -y install glib2-devel mysql-devel zlib-devel pcre-devel cmake gcc-c++ git 1 2 下载安装文件 cd /usr/MyWorkSpace/ git clone https://github.com/maxbube/mydumper.git cd mydumper //注意下面包含'.' cmake . make && make install [root@mysql82 mydumper]#

mysql5.7.20多实例编译安装

家住魔仙堡 提交于 2021-02-07 17:09:13
好记性不如烂笔头! MySQL多实例 实际上就是在同一台服务器上运行多个mysql服务进程。 相同点:公用同一套MySQL安装程序。 不同点:使用不同的配置文件(也可以相同)、启动程序(也可以相同)、数据库文件、端口号。 我理解的是类似同一套tomcat环境跑多个webapp项目,同一套python环境运行多个python程序。 环境准备 操作系统:CentOS release 6.5 (Final) MySQL版本:5.7.20 一部岛国大片(编译时用) MySQL5.7.20安装包下载 官网下载 MySQL Community Server 5.7.20 Operating System:Source Code OS Version:Generic Linux 一种带boost版,一种不带。新版的MySQL都需要安装boost库,如果使用不带boost版的安装包还要单独再下载boost包,网上找了好多,下载地址都是 wget http://downloads.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz ,但是发现下载非常慢,后来直接下载带boost版的MySQL,将 里面的boost包拷贝出来,用来给不带boost版本的MySQL源码包编译用

管理博文 亿级QPS技术架构如何搭建?阿里全新开源2021高并发技术小册,简直不要太香!

依然范特西╮ 提交于 2021-02-06 00:01:22
基础 我之前也踩过一些坑, 参与的一个创业项目在初始阶段就采用了服务化的架构,但由于当时人力有限,团队技术积累不足,因此在实际项目开发过程中,发现无法驾驭如此复杂的架构,也出现了问题难以定位、系统整体性能下降等多方面的问题,甚至连系统宕机了都很难追查到根本原因,最后不得不把服务做整合,回归到简单的单体架构中。 所以我建议一般系统的演进过程应该遵循下面的思路: 最简单的系统设计满足业务需求和流量现状,选择最熟悉的技术体系。随着流量的增加和业务的变化,修正架构中存在问题的点,如单点问题,横向扩展问题,性能无法满足需求的组件。在这个过程中,选择社区成熟的、团队熟悉的组件帮助我们解决问题,在社区没有合适解决方案的前提下才会自己造轮子。当对架构的小修小补无法满足需求时,考虑重构、重写等大的调整方式以解决现有的问题。 以淘宝为例, 当时该业务从 0 到 1 的阶段是通过购买的方式快速搭建了系统。而后,随着流量的增长,淘宝做了一系列的技术改造来提升高并发处理能力,比如数据库存储引擎从MyISAM 迁移到 InnoDB,数据库做分库分表,增加缓存,启动中间件研发等。当这些都无法满足时就考虑对整体架构做大规模重构,比如说著名的“五彩石”项目让淘宝的架构从单体演进为服务化架构。正是通过逐步的技术演进,淘宝才进化出如今承担过亿QPS 的技术架构。 下面就为大家展示一份技术小册,需要的朋友点赞收藏