InnoDB

MySQL如何找出未提交事务的SQL浅析

雨燕双飞 提交于 2020-12-04 07:22:32
很久之前曾经总结过一篇博客 “ MySQL如何找出未提交事务信息 ” ,现在看来,这篇文章中不少知识点或观点都略显肤浅,或者说不够深入,甚至部分结论是错误的。下面重新探讨一下这个话题。那么我们还是以之前的例子来介绍。 --准备测试环境数据(实验环境为MySQL 8.0.18社区版) mysql> create table kkk(id int , name varchar (12)); Query OK, 0 rows affected (0.34 sec) mysql> insert into kkk values (1, 'kerry' ); Query OK, 1 row affected (0.01 sec) mysql> insert into kkk values (2, 'jerry' ); Query OK, 1 row affected (0.00 sec) mysql> insert into kkk values (3, 'ken' ); Query OK, 1 row affected (0.00 sec) mysql> mysql> create table t(a varchar (10)); Query OK, 0 rows affected (0.47 sec) mysql> insert into t values ( 'test' );

MySQL常用配置和性能压力测试:MySQL系列之十五

橙三吉。 提交于 2020-12-04 02:01:42
一、MySQL常用配置 以下所有配置参数以32G内存的服务器为基 1、打开独立的表空间 innodb_file_per_table = 1 2、MySQL服务所允许的同时会话数的上限,默认为151,经常出现Too Many Connections的错误提示,则需要增大此值 max_connections = 8000 3、操作系统在监听队列中所能保持的连接数 back_log = 300 4、每个客户端连接最大的错误允许数量,当超过该次数,MYSQL服务器将禁止此主机的连接请求,直到MYSQL服务器重启或通过flush hosts命令清空此主机的相关信息 max_connect_errors = 1000 5、所有线程所打开表的数量 open_files_limit = 10240 6、每个连接传输数据大小,最大1G,须是1024的倍数,一般设为最大的BLOB的值 max_allowed_packet = 32M 7、请求的最大连接时间 wait_timeout = 10 8、排序缓冲被用来处理类似ORDER BY以及GROUP BY队列所引起的排序 sort_buffer_size = 16M 9、不带索引的全表扫描,使用的buffer的最小值 join_buffer_size = 16M 10、查询缓冲大小 query_cache_size = 128M 11

mysql 的逻辑架构 与 存储引擎的介绍

给你一囗甜甜゛ 提交于 2020-12-03 22:46:51
mysql 的逻辑架构分为三层: 最上层的服务大多数基于网络的客户端、服务器的工具或者服务都有类似的架构,比如连接处理,授权认证、安全等 第二层架构:mysql的核心服务功能都在这一层,包括查询解析,分析,优化,缓存以及所有的内置函数,所有跨存储引擎的功能都在这一层实现:存储过程,触发器、视图 第三层:包含存储引擎。负责数据的存储和提取,innoDB是个例外,它会解析外键定义,因为mysql服务器本身没有实现该功能 连接管理与安全性: 当客户端连接到mysql服务器是,服务器需要对其进行认证,认证基于用户名,原始主机信息和密码,一旦客户端连接成功,服务器 会继续验证该客户端是否具有执行某个特定查询的权限 优化与执行: mysql会解析查询,并创建内部数据结构(解析树),然后对其进行各种优化,包括重写查询,决定表的读取顺序,以及选择合适的索引,用户可以通过特殊的关键字提示优化器,影响他的决策过程,也可以请求优化器解释优化过程的各个因素,使yoghurt可以知道服务器是如何进行优化决策的,并提供一个参考基准,便于用户重构查询和修改相关配置,优化查询效率 存储引擎对于优化查询时有影响的 对于select语句,在解析查询之前,服务器会先检查缓存,如果能找到对应的查询,服务器就不会再执行查询解析,优化和执行的整个过程,而是直接返回查询结果 并发控制: 只要有多个查询需要在同一时刻修改数据

会话和锁信息查询视图 | 全方位认识 sys 系统库

▼魔方 西西 提交于 2020-12-03 01:15:49
在上一篇 《等待事件统计视图 | 全方位认识 sys 系统库》 中,我们介绍了sys 系统库中的等待事件统计视图,本期的内容先给大家介绍会话信息和锁等待信息查询视图,通过这些视图我们可以清晰地知道每个会话正在做什么事情,是否存在锁等待。下面请跟随我们一起开始 sys 系统库的系统学习之旅吧~ PS:由于本文中所提及的视图功能的特殊性(DBA日常工作中除了排查慢SQL之外,另外一个可能需要占用大量精力的地方可能就是锁问题分析),所以下文中会列出相应视图中的select语句文本,以便大家更直观地学习它们。 01 innodb_lock_waits,x$innodb_lock_waits InnoDB当前锁等待信息,默认按照发生锁等待的开始时间升序排序--wait_started字段即innodb_trx表的trx_wait_started字段。数据来源:information_schema的innodb_trx、innodb_locks、innodb_lock_waits(注:在8.0及其之后的版本中,该视图的信息来源为information_schema的innodb_trx、performance_schema的data_locks和data_lock_waits) 视图查询语句文本 # 不带x$前缀的视图的查询语句 SELECT r.trx_wait_started AS

其他混杂视图 | 全方位认识 sys 系统库

自闭症网瘾萝莉.ら 提交于 2020-12-03 00:17:34
在 《语句效率统计视图|全方位认识 sys 系统库》 中,为大家介绍了利用sys 系统库查询语句执行效率的快捷视图,本期将为大家介绍一些不便归类的混杂视图,本篇也是该系列中最后一篇介绍视图的文章。 PS:由于本文中所提及的视图功能的特殊性(DBA日常工作中可能需要查询一些信息做一些数据分析使用),所以下文中会列出部分视图中的select语句文本,以便大家更直观地学习。 01 metrics server的计数指标,包含innodb内部的一些度量、全局状态变量、当前系统时间,默认按照变量类型和名称进行排序,数据来源:performance_schema的global_status、memory_summary_global_by_event_name,information_schema.innodb_metrics、NOW()和UNIX_TIMESTAMP()函数 该视图包含以下几个部分的信息 * 来自performance_schema.global_status表中的全局状态变量名称及其统计值 * 来自information_schema.innodb_metrics表中的innodb指标变量和统计值 * 来自performance_schema内存监控中的当前分配的和总的历史分配内存统计值 * 来自系统当前时间(使用可读格式的unix时间戳) * PS:global

mysql5.7 datetime 默认值为‘0000-00-00 00:00:00'值无法创建问题解决

不羁岁月 提交于 2020-12-01 21:23:29
表结构: DROP TABLE IF EXISTS `t_consts_classify`; CREATE TABLE `t_consts_classify` ( `id` int ( 11 ) NOT NULL AUTO_INCREMENT, `name` varchar ( 100 ) NOT NULL DEFAULT '' COMMENT ' 名称 ' , `code` varchar ( 50 ) NOT NULL DEFAULT '' , `parent_code` varchar ( 50 ) NOT NULL DEFAULT ' 0 ' COMMENT ' 父级别code ' , `sort` int ( 11 ) NOT NULL DEFAULT ' 0 ' COMMENT ' 排序 ' , `create_time` datetime NOT NULL DEFAULT ' 0000-00-00 00:00:00 ' , `create_user` varchar ( 32 ) NOT NULL DEFAULT ' system ' , `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP , `update_user` varchar ( 32

"High Performance MySQL"阅读笔记(一)

南楼画角 提交于 2020-12-01 06:17:56
在大规模水平集群的架构设计中,开源的MySQL受到的关注度越来越高。 到2012年整个淘宝网的核心交易系统已经全部运行在基于PC服务器的MySQL数据库集群中。 一、MySQL架构与历史 MySQL最重要、最与众不同的特性是它的存储引擎架构,这种架构的设计将查询处理(Query Processing)及其他系统任务(Server Task)和数据的存储/提取相分离。 这种处理和存储相分离的设计可以在使用时根据性能、特性,以及其他需求来选择数据存储方式。 1.1 MySQL逻辑架构 照着书上画的逻辑架构图 最上层的客户端; 第二层包含大多数MySQL核心服务功能,包括查询解析、分析、优化、缓存以及所有的内置函数。所有跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等; 第三层包含了存储引擎。存储引擎不会去解析SQL,不同存储引擎之间也不会相互通信。(InnoDB会解析外键定义,这是一个例外) 1.1.1 连接管理与安全性 每个客户端连接都会在服务器进程中拥有一个线程。服务器会缓存线程,因此不需要为每个新建的连接创建或者销毁线程。 1.1.2 优化与执行 MySQL会解析查询,并创建内部数据结构(解析树),然后对其进行各种优化,包括重写查询、决定表的读取顺序,以及选择合适的索引等。用户可以通过特殊的关键字提示(hint)优化器,影响它的决策过程。也可以请求优化器解释

mysql.idb

倖福魔咒の 提交于 2020-12-01 02:04:33
自1107以后,我们银行的核心系统MGR已经上线两周多了,目前还是比较稳定,最近有点时间可以深入学习一下mysql 8.0的一些特性。 mysql.idb这个数据文件是在8.0才出现,我们来具体了解一下。 1、先查看一下mysql数据库 mysql> show tables; +---------------------------+ | Tables_in_mysql | +---------------------------+ | columns_priv | | component | | db | | default_roles | | engine_cost | | func | | general_log | | global_grants | | gtid_executed | | help_category | | help_keyword | | help_relation | | help_topic | | innodb_index_stats | | innodb_table_stats | | password_history | | plugin | | procs_priv | | proxies_priv | | role_edges | | server_cost | | servers | | slave_master_info | |

MySQL 概述

余生颓废 提交于 2020-11-30 21:37:33
什么是MySQL? MySQL 是一款开源的 [ 关系型数据库软件系统 , RDBMS ] ,在GPL(General Public License) 的许可下根据需求可自定义源码。 虽说Oracle 为商业数据库的无冕之王,但随着阿里、网易、雅虎等大型互联网企业的推动,目前MySQL已经成为当今最流行的开源数据库,并一步步开始占领原有商业数据库的市场... 数据库排名 [1] https://db-engines.com/en/ranking MySQL发展历史 最初为AB公司的产品,Mysql5.0及之前的版本均由AB公司管理, 在2008年的时候AB公司被 Sun 公司收购,Mysql也就归属到了 Sun公司 下; 没多久,Sun公司就被Oracle公司收购了,此期间诞生了一个Sun向Oracle的过渡版本,Mysql 5.5 版本; 直到 Mysql 5.6 就彻底归属于Oracle公司旗下了,从Oracle收购Mysql以来,Mysql发展的速度及新的功能越来越强大,逐步向Oracle靠拢,如:表空间、redo、undo分离、隐藏索引等; 2019年,Mysql8.0.15已经GA(官方发布稳定版本), 可以看到在Oracle公司下的Mysql是发育比较好的 MySQL的工作原理 工作原理 存储引擎 MySQL 数据库的存储引擎是插件式的

大厂面试超高频MySQL题目(含答案):基础+索引+事务+锁

*爱你&永不变心* 提交于 2020-11-30 14:58:15
MySQL基础篇 公众号:Java架构师联盟,每日更新技术好文 说一下 MySQL 执行一条查询语句的内部执行过程? 客户端先通过连接器连接到 MySQL 服务器。 连接器权限验证通过之后,先查询是否有查询缓存,如果有缓存(之前执行过此语句)则直接返回缓存数据,如果没有缓存则进入分析器。 分析器会对查询语句进行语法分析和词法分析,判断 SQL 语法是否正确,如果查询语法错误会直接返回给客户端错误信息,如果语法正确则进入优化器。 优化器是对查询语句进行优化处理,例如一个表里面有多个索引,优化器会判别哪个索引性能更好。 优化器执行完就进入执行器,执行器就开始执行语句进行查询比对了,直到查询到满足条件的所有数据,然后进行返回。 MySQL 提示“不存在此列”是执行到哪个节点报出的? 此错误是执行到分析器阶段报出的,因为 MySQL 会在分析器阶段检查 SQL 语句的正确性。 MySQL 查询缓存的功能有何优缺点? MySQL 查询缓存功能是在连接器之后发生的,它的优点是效率高,如果已经有缓存则会直接返回结果。 查询缓存的缺点是失效太频繁导致缓存命中率比较低,任何更新表操作都会清空查询缓存,因此导致查询缓存非常容易失效。 如何关闭 MySQL 的查询缓存功能? MySQL 查询缓存默认是开启的,配置 query cache type 参数为 DEMAND(按需使用)关闭查询缓存,MySQL