InnoDB

Why does TRANSACTION / COMMIT improve performance so much with PHP/MySQL (InnoDB)?

不问归期 提交于 2021-02-05 17:55:34
问题 I've been working with importing large CSV files of data; usually less than 100,000 records. I'm working with PHP and MySQL (InnoDB tables). I needed to use PHP to transform some fields and do some text processing prior to the MySQL INSERT s (part of process_note_data() in code below). MySQL's LOAD DATA was not feasible, so please do not suggest it. I recently tried to improve the speed of this process by using MySQL transactions using START TRANSACTION and COMMIT . The performance increase

MySQL 内核深度优化

余生长醉 提交于 2021-02-05 15:20:29
MYSQL数据库适用场景广泛,相较于Oracle、DB2性价比更高,Web网站、日志系统、数据仓库等场景都有MYSQL用武之地,但是也存在对于事务性支持不太好(MySQL 5.5版本开始默认引擎才是InnoDB事务型)、存在多个分支、读写效率瓶颈等问题。 一.内核性能的优化 由于腾讯云上的DB基本都需要跨园区灾备的特性,因此CDB for MySQL的优化主要针对主从DB部署在跨园区网络拓扑的前提下,重点去解决真实部署环境下的性能难题。经过分析和调研,我们将优化的思路归纳为:“消除冗余I/O、缩短I/O路径和避免大锁竞争”。以下是内核性能的部分案例: 1.主备DB间的复制优化 问题分析 如上图所示,在原生MySQL的复制架构中,Master侧通过Dump线程不断发送Binlog事件给Slave的I/O线程,Slave的I/O线程在接受到Binlog事件后,有两个主要的动作: 写入到Relay Log中,这个过程会和Slave SQL线程争抢保护Relay Log的锁。 更新复制元数据(包含Master的位置等信息)。 优化方法 经过分析,我们的优化策略是: 优化效果 如上图所示,经过优化:左图35.79%的锁竞争(futex)已经被完全消除;同压测压力下,56.15%的文件I/O开销被优化到19.16%,Slave I/O线程被优化为预期的I/O密集型线程。 2

MySQL模式设置方式介绍(严格模式:STRICT_TRANS_TABLES,无引擎提交:NO_ENGINE_SUBSTITUTION,填补字符长度:PAD_CHAR_TO_FULL_LENGTH)

落花浮王杯 提交于 2021-02-05 14:45:33
引入 我们之前所学的表数据类型中定义 char 或者 varchar 字段, 当你写入长度超过了你指定的长度, 他也不会报错, 这对于 mysql 来说是没有任何意义的 本篇文章主要介绍 : STRICT_TRANS_TABLES : 严格模式 NO_ENGINE_SUBSTITUTION : 无引擎提交 PAD_CHAR_TO_FULL_LENGTH : 填补字符到全长度 ps : char不指定宽度. 默认宽度是1, null 关键字没有宽度限制 一.严格模式与非严格模式 简单来说就是 MySQL 自身对数据进行严格的校验(格式、长度、类型等),比如一个整型字段我们写入一个字符串类型的数据,在非严格模式下 MySQL 不会报错, 定义的类型长度超出了也不会报错, 严格模式则会 二.不同版本的不同效果 5.6版本 默认没有开启严格模式 规定只能存一个字符你给了多个字符, 那么会自动帮你截取 5.7版本 及以上或者开启了严格模式 那么规定只能存几个 就不能超, 一旦超出范围立刻报错(Data too long for column ‘name’ at row 1) 三.严格模式的好处 使用数据库的准则 : 能尽量少的让数据库干活就尽量少, 不要给数据库增加额外的压力 而在非严格模式下, 当遇到宽度超出时, 会进行额外的截取操作这种操作就会给数据库增加额外的压力 换个角度来说,

Multiple Create Trigger query in PDO

╄→尐↘猪︶ㄣ 提交于 2021-02-05 08:09:16
问题 I am trying to run the following SQL string in PDO. I can confirm that the code does execute in MySQL directly but running it in PHP PDO it throws an error. I understand that the DELIMITER $$ is not available on the PDO interface. And according to how to execute mysql command DELIMITER it should be fine to just leave the delimiter out of the query. QUERY STRING: CREATE DEFINER=CURRENT_USER TRIGGER `M5_tblMVTransactionVat_VatInsert` AFTER INSERT ON `M2_tblVatRevisions` FOR EACH ROW BEGIN

Locking and concurrency with MySQL

扶醉桌前 提交于 2021-02-05 07:27:25
问题 I'm currently using Mysql with InnoDB storage engine for all tables. So, I'm wondering if this is a real problem and if there's a solution for it. For example, I will charge a user using a database transaction: 1. check his balance 2. subtract his balance 3. credit this balance somewhere 4. commit What would happen if an update happens just after #1 and before 2 & 3. If the user withdraws or purchases something else that results his balance to be zero. This would have led to to lose that

详解MySQL数据类型

偶尔善良 提交于 2021-02-05 02:42:01
原文地址http://www.cnblogs.com/xrq730/p/5260294.html,转载请注明出处,谢谢! 前言 很久没写文章,也有博友在我的有些文章中留言,希望我可以写一些文章,公司项目一直很忙,但是每天也尽量腾出一些时间写一些东西,主要针对工作中一些常用的知识点系统性的梳理(可能我们在工作中只是纯粹的使用而已,不会去进行总结、归纳)。 本文写的内容是MySQL数据类型,之前写MySQL系列文章的时候一直忽略的一个知识点,现在想来,我们学习一门语言,无非从两个方面入手: 基本语法,有了语法,我们才可以组织逻辑 数据类型,即在特定场景下选择合适的数据类型,到底是用整型还是浮点型还是字符串,每种数据机构占多少字节,最大值是多少。这点只针对强类型的语言,像js这种弱类型的语言,是不需要考虑这一点的 希望通过一篇文章的梳理,可以把MySQL数据结构这块都归纳清楚。 整型 先从最基本的数据类型整型说起,首先用一张表格归纳一下: 数据类型 字节数 带符号最小值 带符号最大值 不带符号最小值 不带符号最大值 TINYINT 1 -128 127 0 255 SMALLINT 2 -32768 32767 0 65535 MEDIUMINT 3 -8388608 8388607 0 16777215 INT 4 -2147483648 2147483647 0 4294967295

win10 mysql5.7忘记密码如何解决

末鹿安然 提交于 2021-02-05 00:36:45
点击开始菜单,搜索cmd.exe,左击以管理员身份运行 操作之前先备份好数据库(切忌) C:\Users\Administrator>cd C:\Program Files\MySQL\MySQL Server 5.7 \bin C:\Program Files\MySQL\MySQL Server 5.7 \bin>mysqld --skip-grants- tables //发现不成功,原因是没有data目录,于是在此C:\Program Files\MySQL\MySQL Server 5.7目录下创建了data目录,成功执行且可以跳过认证 //但是进入数据库发现原来的库都不见了,原来是默认情况下,MySQL的数据库文件是保存在C:/ProgramData/mysql/MySQL Server 5.7/Data/ 而且,Win7,Win10缺省是把C:/ProgramData目录隐藏的。 //因此我们需要指定配置文件来启动 C:\Program Files\MySQL\MySQL Server 5.7 \bin>mysqld --defaults- file = " C:\ProgramData\MySQL\MySQL Server 5.7\my.ini " --user=mysql --skip-grants-tables //进入数据库 C:\Program Files

MySQL —— 缓冲池 Buffer Pool

。_饼干妹妹 提交于 2021-02-04 09:39:57
本文主要内容源自官网: https://dev.mysql.com/doc/refman/8.0/en/innodb-buffer-pool.html 感兴趣的可以直接阅读 缓冲池是主内存的一块区域,在 InnoDB 访问表和索引数据时会在其中进行高速缓存(可以联系 CPU 的高速缓存)。在专用服务器上,通常会把 80% 的内存分配给缓冲池。 缓冲池被分为多个页面,这些页面可能包含多个行。缓冲池使用列表数据结构。使用 LRU (Least Recently Used,最近最少使用)算法的变体将数据从缓存中老化。 缓冲池 LRU 算法 缓冲池 LRU 算法将缓冲池作为列表进行管理。当缓冲池空间不足,但有新页面需要添加到缓冲池时,将驱逐最近最少使用的页面,并将新页面添加到列表的 Midpoint(中点)。总列表分为两个子列表(Sublist): 1. 最前面的是最近访问过的新页面(或者叫 young 页面,年轻页面)子列表 2. 末尾是最近访问的旧页面的子列表 该算法将经常需要访问的页面保留在 New Sublist。Old Sublist 包含不常用的页面,这些页面是驱逐的候选对象。 通常情况,该算法遵循以下规则: 1. 的 Buffer Pool 用于 Old Sublist 2. 列表的 Midpoint 是 New Sublist 的 Tail 和 Old Sublist 的

mysql进阶知识

我与影子孤独终老i 提交于 2021-02-04 04:55:54
一.存储引擎 引擎 指的是一个系统的核心部分 引擎有不同分类是为了适应不同的使用场景 查看mysql支持所有引擎 show engines; MRG_MYISAM 是一堆MYISAM表的集合 用于做水平分表,如果一个表中数据量太大 将导致效率降低 水平分表就是把整个大表拆成不同的小表,每一次查询 会判断数据在哪一个表中 然后对应去查找 以此来提高效率 name age sex jerry 40 woman name age sex bgon 30 man 垂直分表 name age sex phone addr gf bf idcard number jerry 40 woman 110 上海 xx xx 身份证 学号 当一个表中 字段太多 然而常用的信息就那么一两个 那就可以把不常用字段 切到另一个表中 然后建立关联关系 innodb 是最最常用的引擎 因为支持 事务 行锁 外键一系列功能.... MyISAM 没有上述一堆功能 但是 存储效率比innodb要高 并且支持分表 MEMORY 速度快 不能永久存储 没有特别的功能 二.详细建表语句 []表示可选 create table 名称(字段 类型[(宽度) 约束条件],字段 类型,......) 三.mysql数据类型 为什么要给数据分类? 1.不同的数据类型 描述信息可以更加方便准确 2

一周学习小总结,MySQL进阶~

一笑奈何 提交于 2021-02-04 04:55:37
今天的这篇推文,是对前六天MySQL学习的一个进阶学习和小总结,前两天是端午节,大家过得如何?休息之余,不要忘记坚持学习,加油! 不同岗位对MySQL的技术要求 对于不用的岗位,我们对MySql的技术要求不同。 数据分析岗位,侧重查询和多表关联的复杂查询。对于数据分析来说,主要掌握查询,取数据,不关心性能。 数据库开发,程序员岗,注重设计系统,包括表的设计,增删改查,懂得数据库进行查询的原理,依据统计信息对查询进行性能优化,处理非常大的数据量的的查询,SQL的语言的复杂性较数据分析师的高。 DBA-数据库管理员,连接、配置服务器,保证SQL的服务性能、稳定性,修改慢查询,此外,数据库的集群管理,机房服务器连接的一致性管理也是重点。 Python操作MySQL 主要使用库:Python DB-API 常用模块: MySQLdb :MySQL-Python,底层C语言实现,在Python2版本中使用多 mysql-connector : MySqL官方提供,使用不是很友好 pymysql:使用Python实现,Python三版本以上使用, 主要使用pymysql 基本操作 连接数据库 import pymysql db = pymysql.connect(host='',port=3306) 获取游标 cs = db.cursor() Cursor是游标,指针的意思