mdl

MySQL实战学习(三)

左心房为你撑大大i 提交于 2020-02-27 15:52:14
MySQL实战学习(三) 索引 索引的常见模型 哈希表 有序数组 搜索树 哈希表 哈希表是一种以键 - 值(key-value)存储数据的结构,我们只要输入待查找的值即 key,就可以找到其对应的值即 Value。 优点:做数据新增时,索引的建立会比较快。适用于等值查询的场景。 缺点:在进行数据区间查找时,会比较慢。 有序数组 由数组的特点可以知道,有序数组在等值查询和范围查询的场景的性能非常优秀。在有序数组中利用二分搜索可以快速的找到对应的值。但是当数据大量变动时,采用有序数组会导致性能降低。因此,有序数组索引只适用于静态存储引擎。 优点:有序数组在等值查询和范围查询场景中的性能就都非常优秀。 缺点:在需要更新数据的时候就麻烦了,你往中间插入一个记录就必须得挪动后面所有的记录,成本太高。 搜索树 二叉搜索树的特点是:每个节点的左儿子小于父节点,父节点又小于右儿子。这样如果你要查 ID_card_n2 的话,按照图中的搜索顺序就是按照 UserA -> UserC -> UserF -> User2 这个路径得到。这个时间复杂度是 O(log(N))。 优点:查询时间复杂度O(log(N)),更新时间复杂度O(log(N)) 缺点:数据库存储大多不适用二叉树,因为树高过高,会导致多次的硬盘数据读取,会适用N叉树 InnoDB的索引模型 InnoDB 使用了 B+ 树索引模型

面对亿量级数据,除了分库分表,Mysql分区表你也应该了解一下

假如想象 提交于 2020-02-27 02:04:35
什么是分区表 分区就是根据一定的规则,把一个表分解成多个更小的、更容易管理的部分,在逻辑上就只有一个表,但实际上这个表可能有N个物理分区对象组成,每个分区都是一个独立的对象,可以独立处理,可以作为表的一部分进行处理。 小试牛刀 看mysql是否支持分区 #查看一下mysql版本 mysql> select version(); +------------+ | version() | +------------+ | 5.7.11-log | +------------+ 1 row in set (0.02 sec) #查看是否支持表分区 mysql> show plugins; +----------------------------+----------+--------------------+-----------------+---------+ | Name | Status | Type | Library | License | +----------------------------+----------+--------------------+-----------------+---------+ | partition | ACTIVE | STORAGE ENGINE | NULL | GPL | +------------------------

power Designer 导入 excel 表结构数据 创建表

时间秒杀一切 提交于 2020-02-27 00:26:53
一、编写测试excel,如下: 二、打开PowerDesigner,创建物理模型(Physical Data Model) 三、在PowerDesigner菜单栏中,依次点击“Tools ->Excute Commands->Edit/Run Script.. 四、修改如下脚本,指定excel所在路径及文件名: Option Explicit Dim mdl ' the current model Set mdl = ActiveModel If (mdl Is Nothing) Then MsgBox "There is no Active Model" End If Dim HaveExcel Dim RQ Dim x1sApp,xlsWorkBook,xlsSheet RQ = vbYes 'MsgBox("Is Excel Installed on your machine ?", vbYesNo + vbInformation, "Confirmation") If RQ = vbYes Then HaveExcel = True ' Open & Create Excel Document Set x1sApp = CreateObject("Excel.Application") set xlsWorkBook = x1sApp.Workbooks.Open("J:

Mysql锁总结

陌路散爱 提交于 2020-02-26 16:26:13
今天我们来介绍一下Mysql中不同类型的锁 数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来 实现这些访问规则的重要数据结构 根据加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类 全局锁 全局锁就是对整个数据库实例加锁。MySQL 提供了一个加全局读锁的方法, 命令是 Flush tables with read lock (FTWRL)。当你需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句 全局锁的典型使用场景是,做全库逻辑备份 但是让整库都只读,听上去就很危险: 如果你在主库上备份,那么在备份期间都不能执行更新,业务基本上就得停摆; 如果你在从库上备份,那么备份期间从库不能执行主库同步过来的 binlog,会导致主从 延迟 官方自带的逻辑备份工具是 mysqldump。当 mysqldump 使用参数–single-transaction 的时候,导数据之前就会启动一个事务,来确保拿到一致性视图。而由于 MVCC 的支持, 这个过程中数据是可以正常更新的 有了这个功能,为什么还需要 FTWRL 呢?一致性读是好,但前提是引擎 要支持这个隔离级别。比如,对于

一步一步带你入门MySQL中的索引和锁

↘锁芯ラ 提交于 2020-02-26 09:06:01
索引 索引常见的几种类型 索引常见的类型有 哈希索引,有序数组索引,二叉树索引,跳表 等等。本文主要探讨 MySQL 的默认存储引擎 InnoDB 的索引结构。 InnoDB的索引结构 在InnoDB中是通过一种多路搜索树—— B+树 实现索引结构的。在B+树中是 只有叶子结点会存储数据 ,而且 所有叶子结点会形成一个链表 。而在InnoDB中维护的是一个双向链表。 你可能会有一个疑问,为什么使用 B+树 而不使用二叉树或者B树? 首先,我们知道访问磁盘需要访问到指定块中,而访问指定块是需要 盘片旋转 和 磁臂移动 的,这是一个比较耗时的过程,如果 增加树高那么就意味着你需要进行更多次的磁盘访问 ,所以会采用n叉树。而使用B+树是因为如果使用 B树在进行一个范围查找的时候每次都会进行重新检索,而在B+树中可以充分利用叶子结点的链表 。 在建表的时候你可能会添加多个索引,而 InnDB 会 为每个索引建立一个 B+树 进行存储索引 。 比如这个时候我们建立了一个简单的测试表 create table test( id int primary key, a int not null, name varchar, index(a) )engine = InnoDB; 复制代码 这个时候 InnDB 就会为我们建立两个 B+索引树 一个是 主键 的 聚簇索引 ,另一个是 普通索引 的

MySQL中使用备库作逻辑备份,如何处理主库的DDL语句

僤鯓⒐⒋嵵緔 提交于 2020-02-26 08:37:23
假设DDL针对表xt ## 确保可重复读隔离级别 S1: set session transaction isolation level repeatable read; ## 确保能得到一个一致性视图 S2: start transaction with consistent snapshot; /* 其他的表 */ ## 设置一个保存点 S3: savepoint sp; /* 时刻1 */ ## 拿到表结构 S4: show create table xt; /* 时刻2 */ ## 正式导入数据 S5: select * from xt; /* 时刻3 */ ## 回滚到保存点 - sp,释放xt的MDL锁 S6: rollback to savepoint sp; /* 时刻4 */ /* 其他的表 */ 如果在S4语句执行之前到达,现象是没有影响,备份拿到的是DDL后的表结构 如果在时刻2到达,则表结构已经被改过了,S5执行的时候,会报错: mysqldump: Error 1412: Table definition has changed, please retry transaction when dumping table ,现象是mysqldump终止 如果在时刻2和时刻3之间到达,mysqldump占着xt的MDL读锁,binlog被阻塞,现象:主从延迟

PowerDesigner中NAME和COMMENT的互相转换,需要执行语句

谁说我不能喝 提交于 2020-02-10 23:56:44
原文: http://www.cnblogs.com/yelaiju/archive/2013/04/26/3044828.html 由于PDM 的表中 Name 会默认=Code 所以很不方便, 所以需要将 StereoType 显示到表的外面来 打开[工具]->[显示属性](英文:Display Preferences) ->Content->Table->右边面板Columns框中 勾选: StereoType ,这样再在 StereoType中填入code字段相同内容就会显示在图形界面上了 使用说明: 在【Tools】-【Execute Commands】-【Edit/Run Script】 下。输入下面你要选择的语句即可,也可以保存起来,以便下次使用,后缀为.vbs。 需要注意的问题是:运行语句时必须在Module模式下,如果是导出报表时执行会出现错误提示。 1.Name转到Comment注释字段。一般情况下只填写NAME,COMMENT可以运行语句自动生成。 将该语句保存为name2comment.vbs 原地址的代码有一些格式上的错误,现已修正。 ' 把pd中那么name想自动添加到comment里面 ' 如果comment为空,则填入name;如果不为空,则保留不变,这样可以避免已有的注释丢失. Option Explicit ValidationMode =

数据库并发处理 - 上的一把好"锁"

久未见 提交于 2020-01-11 00:37:17
为什么要有锁? 我们都是知道,数据库中锁的设计是解决多用户同时访问共享资源时的并发问题。在访问共享资源时,锁定义了用户访问的规则。根据加锁的范围,MySQL 中的锁可大致分成全局锁,表级锁和行锁三类。在本篇文章中,会依次介绍三种类型的锁。在阅读本篇文章后,应该掌握如下的内容: 为什么要在备份时使用全局锁? 为什么推荐使用 InnoDB 作为引擎进行备份? 设置全局只读的方法 表级锁的两种类型 MDL 导致数据库挂掉的问题 如何利用两段锁协议减少锁冲突 如何解决死锁 对于热点表,如何避免死锁检测的损耗? 全局锁 什么是全局锁? 全局锁会让整个库处于只读状态,其他线程语句(DML,DDL,更新事务类)的语句都被会阻塞。 使用全局锁的场景 在做全库逻辑备份时,会把整库进行 select 然后保存成文本。 为什么要使用全局锁? 想象这样一个场景,要备份一个购买系统,其中购买操作设计到更新账号余额表和用户课程表。 现在进行逻辑备份,在备份过程中,一位用户购买了一门课程,这时需要在余额表扣掉余额,然后在购买的课程中加上一门课。正确的顺序肯定是先进行购买操作,减少余额和增加课程然后在进行备份。但却有可能出现这样的问题: 如果在时间顺序上先备份余额表 (u_account),然后用户购买(操作两张表),再备份用户课程表(u_course)? 这时用备份的数据做恢复时,会发现用户没花钱却买了一堂课

SSDT-hook,IDT-hook原理

我们两清 提交于 2020-01-07 08:16:19
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 【详细过程】 这次主要说说核心层的hook。包括SSDT-hook,IDT-hook,sysenter-hook。欢迎讨论,指正!内核层需要驱动,有这方面的基础最好,如果不会,了解下其中的思路也可以的。 II. SSDT-hook,IDT-hook,sysenter-hook 一.SSDT-hook (一)一般思路: 1.先来了解一下,什么是SSDT SSDT既System Service Dispath Table。在了解他之前,我们先了解一下NT的基本组建。在 Windows NT 下,NT 的 executive(NTOSKRNL.EXE 的一部分)提供了核心系统服务。各种 Win32、OS/2 和 POSIX 的 APIs 都是以 DLL 的形式提供的。这些dll中的 APIs 转过来调用了 NT executive 提供的服务。尽管调用了相同的系统服务,但由于子系统不同,API 函数的函数名也不同。例如,要用Win32 API 打开一个文件,应用程序会调用 CreateFile(),而要用 POSIX API,则应用程序调用 open() 函数。这两种应用程序最终都会调用 NT executive 中的 NtCreateFile() 系统服务。 用户模式(User mode)的所有调用

深入理解MDL元数据锁

爷,独闯天下 提交于 2019-12-16 09:54:12
前言: 当你在MySQL中执行一条SQL时,语句并没有在你预期的时间内执行完成,这时候我们通常会登陆到MySQL数据库上查看是不是出了什么问题,通常会使用的一个命令就是 show processlist,看看有哪些session,这些session在做什么事情。当你看到 waiting for table metadata lock 时,那就是遇到MDL元数据锁了。本篇文章将会介绍MDL锁的产生与排查过程。 1.什么是MDL锁 MDL全称为metadata lock,即元数据锁。MDL锁主要作用是维护表元数据的数据一致性,在表上有活动事务(显式或隐式)的时候,不可以对元数据进行写入操作。因此从MySQL5.5版本开始引入了MDL锁,来保护表的元数据信息,用于解决或者保证DDL操作与DML操作之间的一致性。 对于引入MDL,其主要解决了2个问题,一个是事务隔离问题,比如在可重复隔离级别下,会话A在2次查询期间,会话B对表结构做了修改,两次查询结果就会不一致,无法满足可重复读的要求;另外一个是数据复制的问题,比如会话A执行了多条更新语句期间,另外一个会话B做了表结构变更并且先提交,就会导致slave在重做时,先重做alter,再重做update时就会出现复制错误的现象。 元数据锁是server层的锁,表级锁,每执行一条DML、DDL语句时都会申请MDL锁,DML操作需要MDL读锁