oracle|sqlserver|mysql
布道
专注但要有大局观(先大后小,思路为先,实验为辅)
展开
-
彻底理解mysql innodb的死锁
死锁只发生在并发的情况,也就是说你的程序是串行的是不可能发生死锁。通常表现为两个事务都在等待某个资源可用而无法继续进行,因为每个事务都持有另一个事务需要的锁,而它们都不会释放所持有的锁。为此,InnoDB引擎有一个后台的锁监控线程,它负责查看可能的死锁问题,并自动告知用户。可以通过 innodb_deadlock_detect 配置选项禁用死锁检测,innodb还提供了innodb_lock_wa...原创 2019-06-18 19:38:58 · 2241 阅读 · 0 评论 -
mysql 与sqlserver的锁升级
锁可谓RDBMS中最复杂、最神秘的技术。锁升级(Lock Escalation)是指将当前锁的粒度降低(有点Java锁粗化的味道),是一种优化技术,数据库设计者们认为锁是一种稀有资源,为了避免锁的开销(占用内存),数据库中会频繁的出现锁升级的现象。比如sqlserver数据库可以1000个行锁升级为一个页锁,或者将页锁升级为表锁。而InnoDB中不存在锁升级。锁升级的缺陷虽然锁升级会带来一...原创 2019-06-18 11:26:42 · 2687 阅读 · 0 评论 -
从mysql的sharding看多源复制
多源复制(Multi-Source Replication)最初由阿里云数据库RDS团队提出并实现的,主要在 MySQL 基于 Binary Log 单向一对多复制的基础上,实现了节点之间的多对多的复制,使数据可以在多个节点上自由聚合和拆分。在 MySQL 5.7.6 版本被官方收录并正式发布。提问:如果现有业务数据库(trade)已经基于买家(buyerId)作为拆分键实施了db shard...原创 2019-06-11 22:09:27 · 627 阅读 · 0 评论 -
InnoDB memcached Plugin要了解一下
InnoDB memcached Plugin在2012年NoSQL Memcached API for MySQL中提出,可谓达到mysql的最高水准,据说MySQL 5.7版本中单机已经支持到每秒百万级,很多时候我们在研究新技术,更多的时候还是借鉴它的设计理念,并从中得到启发。测试基准InnoDB memcached Architectureinnodb memcached插...原创 2019-06-06 10:49:26 · 1454 阅读 · 0 评论 -
认识mysql组合索引的最左匹配原则
关于mysql组合索引的最左匹配原则很多人都理解都是不正确的,那接下来就带你正确的认识它。为何要使用组合索引呢效率高,减少查询开销,索引列越多,通过索引筛选出的数据越少 覆盖索引,MySQL可以直接通过遍历索引取得数据,而无需回表,这减少了很多的随机io操最左匹配原则是什么顾名思义,就是最左优先,在创建组合索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。复合索引...原创 2019-05-30 13:28:01 · 12303 阅读 · 1 评论 -
分布式数据库中间件 TDDL 学习笔记
之前介绍过从分库分表到数据访问层中间件,Tddl是一个分布式数据库中间件,它在阿里内部被广泛的使用,主要是为了解决分布式数据库产生的相关问题,分布式数据库与数据库中间件息息相关。最近三年社区最流行的是Sharding-Sphere(目前已进入Apache孵化器),但这不妨碍我们学习Tddl,主要是学习它优秀的设计及原理。目录1. 演变历史2. 组件架构3. 关于读写分离4. 执...原创 2019-04-26 18:12:37 · 20844 阅读 · 7 评论 -
mysql partition 实战
一般情况下我们创建的表对应一组存储文件,使用MyISAM存储引擎时是一个.MYI和.MYD文件,使用Innodb存储引擎时是一个.ibd和.frm(表结构)文件。当数据量较大时(一般千万条记录级别以上),MySQL的性能就会开始下降,这时我们就需要将数据分散到多组存储文件,保证其单个文件的执行效率。读写分离分散数据库读写操作压力,分库分表分散存储压力。目录1.hash(field)2...原创 2019-02-22 15:50:18 · 12635 阅读 · 0 评论 -
InnoDB 并发插入,如何使用自增锁和意向锁
并发的任务对同一个临界资源进行操作,如果不采取措施,可能导致不一致,故必须进行并发控制(Concurrency Control)。InnoDB 存储引擎中使用的多种并发控制策略,按照锁的粒度划分,可以分成行锁和表锁。1. 并发控制并发控制保证数据一致性的常见手段有:锁(Locking)和数据多版本(Multi Versioning)。乐观锁和悲观锁其实都是并发控制的机制,同时它们在原理上就...原创 2019-02-21 20:31:54 · 3372 阅读 · 3 评论 -
MySQL join查询优化
在日常的开发中,我们经常遇到这样情况:select * from TableA inner join TableB...它响应速度一直很快的,随着数据的增长,突然有一天开始很慢了。那该怎么破?对,驱动表是突破口,1. 那什么是驱动表呢?指定了联接条件时,满足查询条件的记录行数少的表为驱动表 未指定联接条件时,行数少的表为驱动表(Important!)如果你搞不清楚该让谁做驱动表、...原创 2019-02-21 19:05:49 · 6807 阅读 · 0 评论 -
newsql
NewSQL概念几乎是紧跟着NoSQL之后变得火热的。Google Bigtable与AWS Dynamo奠定了NoSQL技术的根基,而Google Spanner&F1则引领了NewSQL技术的发展。本文首先探讨NoSQL与NewSQL的概念与范畴,随后结合一些业界观点以及两者之间的优缺点对比,来论述各自的应对场景以及未来的演变趋势。本文首发于"NoSQL漫谈(nosqlnotes.co...原创 2019-02-19 13:25:16 · 802 阅读 · 0 评论 -
从宏观上谈mysql查询优化
在之前一次大数据技术分享(大数据-Apache Kylin 2.5更智能、更敏捷、更易用的OLAP引擎)中,有一页的ppt是这样讲sql优化的,有些感触现分享出来。SQL语句的逻辑处理顺序,指的是SQL语句按照一定的规则,一整条语句应该如何执行,每一个关键字、子句部分在什么时刻执行。除了逻辑顺序,还有物理执行顺序。物理顺序是SQL语句真正被执行时的顺序(执行计划),它是由各数据库系统的关系引擎中的...原创 2018-12-29 17:22:37 · 1370 阅读 · 0 评论 -
从Binlog到Change Data Capture Solution
挖掘数据库日志(Binlog)的方式,将数据库变更实时、可靠的从数据库拉取出来,业务可以通过定制化client实时获取变更。分享个基于关系型数据库日志增量订阅的组件,调研图maxwells debezium canal DatabusBinlogmysql有多种日志,常见的有:错误日志(ErrorLog) 更新日志(UpdateLog) 二进制日志(Binlog) ...原创 2018-12-10 17:28:22 · 10834 阅读 · 0 评论 -
mysql索引底层原理分析
大家都知道索引的重要性,基本用法在上章《最全面的mysql索引知识大盘点》已分享过,本章主要是探索索引的底层实现原理。当然了,我们还是以mysql为基准进行探讨。目录前言:innodb和myisam的区别1.物理磁盘知识1.1基本概念1.2硬盘中的数据1.3磁盘的读写原理1.5磁盘的读取响应时间1.6 I/O 的预读与局部性原理2.推理并拆解普通查询语句3....原创 2018-09-23 00:01:40 · 28899 阅读 · 8 评论 -
深入简出的掌握InnoDB引擎 MVCC协议
MVCC(Multi-Version Concurrent Control),即多版本并发控制协议,广泛使用于数据库系统(mysql、HBase)。由于MVCC没有一个统一的实现标准,本人将针对mysql的InnoDB引擎谈谈它的应用。目录1. 概述2. 产生背景3.与事务隔离级别的关联4. 原理4.1 redo日志4.2 undo日志4.3 回滚段4.4 行记...原创 2018-09-22 00:08:04 · 1603 阅读 · 0 评论 -
mysql中Null 与空值的区别
mysql中null确实很难缠,往往很多高手在sql优化时都被它坑过,下面总结了他们的区别:MySQL中,null是未知的,且占用空间的。null使得索引、索引统计和值都更加复杂,并且影响优化器的判断。 空值('')是不占用空间的,注意空值的''之间是没有空格。 在进行count()统计某列的记录数的时候,如果采用的 NULL 值,会被系统自动忽略掉,但是空值是会进行统计到其中的。 判断...原创 2018-09-21 18:08:37 · 6327 阅读 · 1 评论 -
最全面的mysql索引知识大盘点
在我们日常的工作中,索引可谓无处不在,如果不懂索引,就会给人一种盲人摸象的印象。下面主要以mysql为基准来系统的介绍。目录1. 为何需要索引,索引是什么?2. 有哪些分类?2.1. B+数索引2.2.hash索引2.3. 全文索引2.4B+树索引和哈希索引的区别3. 适合及不适合创建的索引?4.最左匹配原则6. 如何分析及优化SQL语句的性能问题7...原创 2018-09-21 18:02:01 · 12671 阅读 · 2 评论 -
模糊查询下(like)如何使用覆盖索引优化
在MySQL中,like ‘string%’可以用到索引,但是like ‘%string%’却会全表扫描。这个是常识,但真的就没有解决方法了吗?有的,要使用到索引覆盖。什么叫覆盖索引? 解释一: 就是select的数据列只用从索引中就能够取得,不必从数据表中读取,换句话说查询列要被所使用的索引覆盖。 解释二: 索引是高效找到行的一个方法,当能通过检索索引就可以读取想要的数据,那...原创 2018-09-20 18:21:31 · 8019 阅读 · 4 评论 -
数据库设计到底要不要保留物理上的外键
之前看过一些博客,他们的争议“数据库设计要物理上的外键,还是逻辑上外键”。议题焦点:数据库设计是否需要外键。这里有两个问题:一个是如何保证数据库数据的完整性和一致性;二是第一条对性能的影响。 正方观点:由数据库自身保证数据一致性,完整性,更可靠,因为程序很难100%保证数据的完整性,而用外键即使在数据库服务器当机或者出现其他问题的时候,也能够最大限度的保证数据的一致性和完整性。 ...原创 2017-09-20 14:36:14 · 2723 阅读 · 0 评论 -
从分库分表到数据访问层中间件
因为业务的发展,数据量也在不断的增长,单一数据库无法满足我们读写的性能需求,而分库分表分散存储压力。水平分割,基于数据记录,通过建立结构相同的几张表分别存储数据。垂直分割,基于列字段,将经常一起使用的字段放在一个单独的表中,分割后的表记录之间是一一对应关系。既然是优化,当然也遵循一些原则,完全可以按照下面的优化顺序来,确定当前没有优化的空间,然后才选择终结方案。1. 背景为数据库减压...原创 2017-08-31 10:56:23 · 21808 阅读 · 0 评论 -
数据库中批量插入数据的方法
If using SQL Server, SqlBulkCopy.WriteToServer(DataTable)SqlBulkCopy.WriteToServer Method (DataTable)Or also with SQL Server, you can write it to a .csv and use BULK INSERTBULK INSERT (Trans原创 2017-08-18 22:31:19 · 1763 阅读 · 0 评论 -
浅谈ORACLE SQL语句优化经验
目录(1) 选择最有效率的表名顺序(只在基于规则的seo/' target='_blank'>优化器中有效)(2) WHERE子句中的连接顺序(3) SELECT子句中避免使用 ‘ * ‘(4) 减少访问get='_blank'>数据库的次数(5) 在SQL*Plus , SQL*Forms和Pro*C中重新设置ARRAYSIZE参数, 可以增加每次get='_bl...原创 2016-07-20 15:19:16 · 2935 阅读 · 0 评论 -
mysql性能优化-慢查询分析、优化索引和配置
一、优化概述具体看《最全面的mysql索引知识大盘点》二、查询与索引优化分析当语句执行时间较长时,通过日志的方式进行记录,这种方式就是慢查询的日志。1、临时开启慢查询日志(如果需要长时间开启,则需要更改mysql配置文件)set global slow_query_log = on;注:如果想关闭慢查询日志,只需要执行 set global slow_query_log = off...转载 2015-12-25 14:35:34 · 566 阅读 · 0 评论 -
信息平台数据库主键中心化设计方案
提到数据库的sharding,你可能会了解mysql的做法: http://www.uml.org.cn/sjjm/201211212.asp下面介绍另一种依靠规则来解决此类问题。我的想法是, 通过合理的规划, 在3.0初期, 就是用bigint, 具体方案如下:1. 维护一个全局的DB-schema文档.2.每个DB一个编号, 格式为3位十进制,例如 BusinessPla...原创 2015-02-12 18:00:55 · 1415 阅读 · 0 评论 -
sqlserver中newid()和newsequentialid()的区别
NEWSEQUENTIALID() 和 NEWID()都可以产生uniqueidentifier类型的,GUID.NEWID()产生的GUID是无序的,随机的。而NEWSEQUENTIALID()是SQL SERVER2005新特性,NEWSEQUENTIALID是基于硬件(一定程度上)生成的GUID以十六进制间隔递增.官方的解释?SQL SERVER 2005中新增了一个NEWSEQUENT...原创 2014-08-08 09:57:04 · 7671 阅读 · 0 评论 -
SQLServer语句执行效率及性能测试
正 文: 写程序的人,往往需要分析所写的SQL语句是否已经优化过了,服务器的响应时间有多快,这个时候就需要用到SQL的STATISTICS状态值来查看了。 通过设置STATISTICS我们可以查看执行SQL时的系统情况。选项有PROFILE,IO ,TIME。介绍如下:SET STATISTICS PROFILE ON:显示分析、编译和执行查询所需的时间(以毫秒为单位原创 2014-04-25 13:42:17 · 1782 阅读 · 1 评论 -
MSSQL2005/2008怎样生成sql脚本来发布到新环境中
我们常常在部署数据库时会发生这样的情况,sql的版本不一致,导致部署比较复杂,可操作性差!有人会想到最后是以sql脚本的方式部署,就解决了这些问题!下面介绍一种工具,可以解决此类问题,完全不用担心,数据,存储过程,函数,视图等Microsoft SQL Server Database Publishing Wizard (微软SQL Server数据库发布向导) 是微软发布的一个开原创 2014-04-01 17:11:11 · 930 阅读 · 0 评论 -
sqlserver锁表、解锁、查看销表
有几个朋友留言建议结合例子来演示一下, 上篇已经说过锁的几种类型, 可以利用系统动态视图sys.dm_tran_locks查看到,重要的栏位如下: resource_type被锁的资源类型(Database, FILE, Object,PAGE,KEY,EXTENT,RID,APPLICATION,METADATA,HOBT,APPOCATION_UNIT) request_m原创 2014-02-25 21:44:34 · 5211 阅读 · 0 评论 -
SQLServer中跨服务器跨数据库之间的数据操作
首先必须理解一个概念:select * from sys.servers (查看系统表,看原来的服务器名)要想跨域就必须在以上信息中可以检索到!怎样添加?--创建链接服务器 exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' exec sp_addlinked原创 2013-10-12 10:30:44 · 2562 阅读 · 0 评论 -
Oracle ODP.NET vs Microsoft MSDP
08年做项目时,用 VS 2005,写据库层还在用 MSDP(System.Data.OracleClient),但是当时由于要操作 XML 和二进制文件,所以又使用了 ODP.NET(Oracle.DataAccess.dll)。那时的第一感觉就是——ODP 好用,于是进一步查了点资料,最关键是 ODP.NET 是否稳定,效率如何。总之,ODP 的功能要比 MSDP 更强大。那之后再做项目,就...原创 2013-08-16 17:39:50 · 1285 阅读 · 0 评论