목차
缘由
状态
前言
获取的知识
InnoDB存储引擎 master thread 的问题?
慢查询日志
分区表
B+树索引
什么时候使用B+树索引
聚集索引和辅助索引
事务的隐式提交
不好的事务习惯
데이터 베이스 MySQL 튜토리얼 读书笔记 《MySQL技术内幕 InnoDB存储引擎》_MySQL

读书笔记 《MySQL技术内幕 InnoDB存储引擎》_MySQL

Jun 01, 2016 pm 01:37 PM
기술 권위 있는 독서 노트

bitsCN.com

缘由

在微博上看到李嘉诚自述的视频中有这么一句话,大意是:我很喜欢读书,我通常读完一本书,把它记到脑子里,再去换另一本书。当时我突有感想,这些年工作,买过的书也不少,有80余本,基本上每本都是经典的好书,也算是有点收藏的味道吧。但是很多书我都是翻一翻,满足自己对某一方面知识的渴望,但自己真的能记在脑力里的却不多,于是在2012年的年尾,伴随着自己的失业,我也打算好好的选择一些书继续阅读,争取读完了,能记住一些,再换下一本。

状态

首读 —— 《MySQL技术内幕 InnoDB存储引擎》 At 2012/12/20

前言

我不是DBA,我是一名开发者,所以站在开发者的角度来读这本书对自己还是有不少收获的,至少以后在项目中设计和使用数据库的过程中,可以考虑到如何更好的和DBA进行有效的沟通。

获取的知识

InnoDB存储引擎 master thread 的问题?

InnoDB的主线程的代码,在每秒执行的任务中:存在固定的只刷新100个脏页到磁盘、合并20个插入缓冲。在写密集的App中,每秒中可以能产生大于100个的脏页,或是产生大于20个插入缓冲,此时的master thread似乎会忙不过来,或者说它总是做得很慢。即使磁盘能在1秒内处理多于100个页的写入和20个插入缓冲的合并,由于hard coding(硬编码)master thread也只会选择刷新100个脏页和合并20个插入缓冲。同时,当发生宕机需要恢复时,由于很多数据还没有刷新回磁盘,所以可能会导致恢复需要很快的时间,尤其是对于insert buffer。

解决办法

InnoDB Plugin提供了一个参数,用来表示磁盘IO的吞吐量,参数为 innodb_io_capacity,默认值为200。对于刷新到磁盘的数量,会按照 innodb_io_capacity的百分比来刷新相对数量的页。规则如下:

  * 在合并插入缓冲时,合并插入缓冲的数量为 innodb_io_capacity 数值的5%。

  * 在从缓冲区刷新脏页时,刷新脏页的数量为 innodb_io_capacity。

如果你使用了SSD类的磁盘,或者将几块磁盘做了RAID,当你的存储拥有更高的IO速度时,完全可以将 innodb_io_capacity 的值调得再高点,知道符合你的磁盘IO的吞吐量为止。

慢查询日志

MySQL允许用户通过 long_query_time 参数来设置,默认值是10,代表10秒。默认情况下,MySQL数据库并不启动慢查询日志,需要我们手工将这个参数(log_slow_queries)设为ON,然后启动。

* 注意1

当设置了long_query_time后,MySQL数据库会记录运行时间超过该值的所有SQL语句,但对于运行时间正好等于long_query_time的情况,并不会被记录下。

* 注意2

从MySQL5.1开始,long_query_time开始以微秒记录SQL语句运行时间

另一个和慢查询日志有关的参数是 log_queries_not_using_indexes,如果运行的SQL语句没有使用索引,则MySQL数据库同样会将这条SQL语句记录到慢查询日志文件。

使用  mysqldumpslow 命令可以分析慢查询日志文件

mysqldumpslow nh122-190-slow.log
로그인 후 복사

MySQL5.1开始可以将慢查询的日志记录放入一张表中,这使我们的查询更加直观。慢查询表在MySQL数据库中,名为slow_log

参数log_output指定了慢查询输出的格式,默认为FILE,你可以将它设为TABLE,然后就可以查询mysql数据库的slow_log表了。

set global log_output='TABLE';
로그인 후 복사

 

分区表

MySQL 5.1 后添加对表分区的支持,当然支持的分区类型为水平分区(一表中不同行的记录分配到不同的物理文件中)。此外,MySQL数据库的分区是局部分区索引,一个分区中既存放了数据又存放了索引。

show variables like '%partition%'/G;
로그인 후 복사

MySQL目前支持的分区类型有:

  * RANGE分区:行数据基于属于一个给定连续区间的列值放入分区。MySQL5.5开始支持RANGE COLUMNS的分区。

  * LIST分区:和RANGE分区类似,只是LIST分区面向的是离散的值。MySQL5.5开始支持LIST COLUMNS的分区。

  * HASH分区:根据用户自定义的表达式的返回值来进行分区,返回值不能为负数。

  * KEY分区:根据MySQL数据库提供的哈希函数来进行分区。

* 不论创建何种类型的分区,如果表中存在主键或者是唯一索引时,分区别必须是唯一索引的一个组成部分。唯一索引可以是允许NULL值的,并且分区列只要是唯一索引的一个组成部分,不需要整个唯一索引列都是分区列。

* 当建表时没有指定主键,唯一索引时,可以指定任何一个列为分区列。

B+树索引

B+树索引其本质就是B+树在数据库中的实现,但是B+的索引在数据库中有一个特定就是高扇出性,因此在数据库中,B+树的高度一般都在2-3层,也就是对于查询某一键值的行记录,最多只需要2到3次IO,而对于当前的硬盘速度,2-3次IO也就意味着查询时间只需要0.02-0.03秒。

什么时候使用B+树索引

* 访问高选择性字段并从表中取出很少一部分行时,对这个字段添加B+树索引是非常有必要的。

聚集索引和辅助索引

InnoDB存储引擎是索引组织表,即表中数据按照主键顺序存放。而聚集索引就是按照每张表的主键构造一颗B+树,并且叶节点中存放着整张表的行记录数据,因此也让聚集索引的叶节点成为数据页。

每张表只能拥有一个聚集索引。 

辅助索引(非聚集索引),叶级别不包含行的全部数据。叶节点除了包含键值以外,每个叶级别中的索引行还包含了一个书签,该书签用来告诉InnoDB存储引擎。

事务的隐式提交

不好的事务习惯

* 在循环中提交

create procedure load1(count int unsigned)begindeclare s int unsigned default 1;declare c char(80) default repreat('a',80);while s <p>* 使用自动提交</p><p>自动提交并不是好习惯,因为这对于初级DBA容易犯错,另外对于一些开发人员可能产生错误的理解,如我们在上面提到的循环提交问题。MySQL数据库默认设置使用自动提交。可以使用如下语句来改变当然自动提交的方式</p><pre class="brush:php;toolbar:false">set autocommit=0;
로그인 후 복사

* 使用自动回滚

create procedure sp_auto_rollback_demo()begindeclare exit handler for sqlexception rollback;start transaction;insert into b select 1;insert into c select 2;insert into b select 1;insert into b select 3;commit;end;
로그인 후 복사

 

 

bitsCN.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

좌표계 변환을 실제로 마스터하셨나요? 자율주행에 필수불가결한 멀티센서 이슈 좌표계 변환을 실제로 마스터하셨나요? 자율주행에 필수불가결한 멀티센서 이슈 Oct 12, 2023 am 11:21 AM

첫 번째 파일럿 및 주요 기사에서는 주로 자율 주행 기술에서 일반적으로 사용되는 여러 좌표계를 소개하고 이들 간의 상관 관계 및 변환을 완료하고 최종적으로 통합 환경 모델을 구축하는 방법을 소개합니다. 여기서 초점은 차량에서 카메라 강체로의 변환(외부 매개변수), 카메라에서 이미지로의 변환(내부 매개변수), 이미지에서 픽셀 단위로의 변환을 이해하는 것입니다. 3D에서 2D로의 변환에는 해당 왜곡, 변환 등이 포함됩니다. 요점: 차량 좌표계와 카메라 본체 좌표계를 다시 작성해야 합니다. 평면 좌표계와 픽셀 좌표계 난이도: 이미지 평면에서 왜곡 제거와 왜곡 추가를 모두 고려해야 합니다. 2. 소개 좌표계에는 픽셀 평면 좌표계(u, v), 이미지 좌표계(x, y), 카메라 좌표계(), 월드 좌표계() 등 총 4가지 비전 시스템이 있습니다. 각 좌표계 사이에는 관계가 있으며,

자율주행과 궤도예측에 관한 글은 이 글이면 충분합니다! 자율주행과 궤도예측에 관한 글은 이 글이면 충분합니다! Feb 28, 2024 pm 07:20 PM

자율주행 궤적 예측은 차량의 주행 과정에서 발생하는 다양한 데이터를 분석하여 차량의 향후 주행 궤적을 예측하는 것을 의미합니다. 자율주행의 핵심 모듈인 궤도 예측의 품질은 후속 계획 제어에 매우 중요합니다. 궤적 예측 작업은 풍부한 기술 스택을 보유하고 있으며 자율 주행 동적/정적 인식, 고정밀 지도, 차선, 신경망 아키텍처(CNN&GNN&Transformer) 기술 등에 대한 익숙함이 필요합니다. 시작하기가 매우 어렵습니다! 많은 팬들은 가능한 한 빨리 궤도 예측을 시작하여 함정을 피하기를 희망합니다. 오늘은 궤도 예측을 위한 몇 가지 일반적인 문제와 입문 학습 방법을 살펴보겠습니다. 관련 지식 입문 1. 미리보기 논문이 순서대로 되어 있나요? A: 먼저 설문조사를 보세요, p

Stable Diffusion 3 논문이 드디어 공개되고, 아키텍처의 세부 사항이 공개되어 Sora를 재현하는 데 도움이 될까요? Stable Diffusion 3 논문이 드디어 공개되고, 아키텍처의 세부 사항이 공개되어 Sora를 재현하는 데 도움이 될까요? Mar 06, 2024 pm 05:34 PM

StableDiffusion3의 논문이 드디어 나왔습니다! 이 모델은 2주 전에 출시되었으며 Sora와 동일한 DiT(DiffusionTransformer) 아키텍처를 사용합니다. 출시되자마자 큰 화제를 불러일으켰습니다. 이전 버전과 비교하여 StableDiffusion3에서 생성된 이미지의 품질이 크게 향상되었습니다. 이제 다중 테마 프롬프트를 지원하고 텍스트 쓰기 효과도 향상되었으며 더 이상 잘못된 문자가 표시되지 않습니다. StabilityAI는 StableDiffusion3이 800M에서 8B 범위의 매개변수 크기를 가진 일련의 모델임을 지적했습니다. 이 매개변수 범위는 모델이 많은 휴대용 장치에서 직접 실행될 수 있어 AI 사용이 크게 줄어든다는 것을 의미합니다.

DualBEV: BEVFormer 및 BEVDet4D를 크게 능가하는 책을 펼치세요! DualBEV: BEVFormer 및 BEVDet4D를 크게 능가하는 책을 펼치세요! Mar 21, 2024 pm 05:21 PM

본 논문에서는 자율 주행에서 다양한 시야각(예: 원근 및 조감도)에서 객체를 정확하게 감지하는 문제, 특히 원근(PV) 공간에서 조감(BEV) 공간으로 기능을 효과적으로 변환하는 방법을 탐구합니다. VT(Visual Transformation) 모듈을 통해 구현됩니다. 기존 방법은 크게 2D에서 3D로, 3D에서 2D로 변환하는 두 가지 전략으로 나뉩니다. 2D에서 3D로의 방법은 깊이 확률을 예측하여 조밀한 2D 특징을 개선하지만, 특히 먼 영역에서는 깊이 예측의 본질적인 불확실성으로 인해 부정확성이 발생할 수 있습니다. 3D에서 2D로의 방법은 일반적으로 3D 쿼리를 사용하여 2D 기능을 샘플링하고 Transformer를 통해 3D와 2D 기능 간의 대응에 대한 주의 가중치를 학습하므로 계산 및 배포 시간이 늘어납니다.

최초의 멀티뷰 자율주행 장면 영상 생성 세계 모델 DrivingDiffusion: BEV 데이터 및 시뮬레이션을 위한 새로운 아이디어 | 최초의 멀티뷰 자율주행 장면 영상 생성 세계 모델 DrivingDiffusion: BEV 데이터 및 시뮬레이션을 위한 새로운 아이디어 | Oct 23, 2023 am 11:13 AM

저자 개인 생각 중 일부 자율주행 분야에서는 BEV 기반의 하위 작업/End-to-End 솔루션 개발로 인해 고품질의 다시점 훈련 데이터와 그에 따른 시뮬레이션 장면 구축이 점점 더 중요해지고 있습니다. 현재 작업의 문제점에 대응하여 "고품질"은 세 가지 측면으로 분리될 수 있습니다. 다양한 차원의 롱테일 시나리오(예: 장애물 데이터의 근거리 차량 및 자동차 절단 과정의 정확한 방향 각도) 곡률이 다른 곡선이나 경사로/병합/병합 등 캡처하기 어려운 차선 데이터. 이는 종종 비용이 많이 드는 대량의 데이터 수집과 복잡한 데이터 마이닝 전략에 의존합니다. 3D 진정한 가치 - 매우 일관된 이미지: 현재 BEV 데이터 수집은 센서 설치/보정, 고정밀 지도 및 재구성 알고리즘 자체의 오류에 의해 영향을 받는 경우가 많습니다. 이것이 나를 이끌었다

GSLAM | 일반적인 SLAM 아키텍처 및 벤치마크 GSLAM | 일반적인 SLAM 아키텍처 및 벤치마크 Oct 20, 2023 am 11:37 AM

갑자기 발견한 19년 된 논문 GSLAM: A General SLAM Framework and Benchmark 오픈소스 코드: https://github.com/zdzhaoyong/GSLAM 전문으로 직접 가서 이 작품의 퀄리티를 느껴보세요~1 Abstract SLAM technology 최근 많은 성공을 거두었으며 많은 첨단 기술 기업의 관심을 끌었습니다. 그러나 기존 또는 신흥 알고리즘에 대한 인터페이스를 사용하여 속도, 견고성 및 이식성에 대한 벤치마크를 효과적으로 수행하는 방법은 여전히 ​​문제로 남아 있습니다. 본 논문에서는 평가 기능을 제공할 뿐만 아니라 연구자에게 자체 SLAM 시스템을 신속하게 개발할 수 있는 유용한 방법을 제공하는 GSLAM이라는 새로운 SLAM 플랫폼을 제안합니다.

'마인크래프트'가 AI 마을로 변신, NPC 주민들이 실제 사람처럼 역할극 '마인크래프트'가 AI 마을로 변신, NPC 주민들이 실제 사람처럼 역할극 Jan 02, 2024 pm 06:25 PM

이 네모난 남자는 눈앞에 있는 '불청객'의 정체를 고민하며 미간을 찌푸리고 있다는 점에 주목해주세요. 알고 보니 그녀는 위험한 상황에 처해 있었고, 이를 깨닫자마자 문제를 해결하기 위한 전략을 찾기 위해 재빨리 정신적 탐색을 시작했습니다. 결국 그녀는 현장을 떠나 가능한 한 빨리 도움을 구하고 즉각적인 조치를 취하기로 결정했습니다. 동시에 반대편에 있는 사람도 그녀와 같은 생각을 하고 있었는데... <마인크래프트>에도 모든 캐릭터가 인공지능에 의해 조종되는 장면이 있었다. 예를 들어 앞서 언급한 소녀는 17세지만 똑똑하고 용감한 택배기사입니다. 그들은 마인크래프트를 배경으로 한 이 작은 마을에서 인간처럼 기억하고 생각하며 살아갈 수 있는 능력을 가지고 있습니다. 그들을 움직이는 것은 아주 새로운 것입니다.

단순한 3D 가우스 그 이상입니다! 최첨단 3D 재구성 기술의 최신 개요 단순한 3D 가우스 그 이상입니다! 최첨단 3D 재구성 기술의 최신 개요 Jun 02, 2024 pm 06:57 PM

위에 작성됨 & 저자의 개인적인 이해는 이미지 기반 3D 재구성은 입력 이미지 세트에서 객체나 장면의 3D 모양을 추론하는 어려운 작업이라는 것입니다. 학습 기반 방법은 3차원 형상을 직접 추정할 수 있는 능력으로 주목을 받았습니다. 이 리뷰 논문은 새로운, 보이지 않는 뷰 생성을 포함한 최첨단 3D 재구성 기술에 중점을 두고 있습니다. 입력 유형, 모델 구조, 출력 표현 및 훈련 전략을 포함하여 가우스 스플래시 방법의 최근 개발에 대한 개요가 제공됩니다. 해결되지 않은 과제와 앞으로의 방향에 대해서도 논의한다. 해당 분야의 급속한 발전과 3D 재구성 방법을 향상할 수 있는 수많은 기회를 고려할 때 알고리즘을 철저히 조사하는 것이 중요해 보입니다. 따라서 이 연구는 가우스 산란의 최근 발전에 대한 포괄적인 개요를 제공합니다. (엄지손가락을 위로 스와이프하세요.

See all articles