mysql连接错误111怎么解决 MySQL 5.5的InnoDB到底有何问题?
MySQL 5.5的InnoDB到底有何问题?从MySQL5.7就开始,开发人员决定了InnoDB统合二级索引的,常规自下而上的方法,而不是早中期版本中自上而下的方法了。在这篇文章中,我们将一个示例来
MySQL 5.5的InnoDB到底有何问题?
从MySQL5.7就开始,开发人员决定了InnoDB统合二级索引的,常规自下而上的方法,而不是早中期版本中自上而下的方法了。在这篇文章中,我们将一个示例来那说明该如何最终形成InnoDB索引。到最后,我将请解释怎么为innodb_fill_factor设置更比较合适的值。
索引构建体系过程
在有数据的表上构建体系索引,InnoDB中有以下几个阶段:1.加载阶段(从聚簇索引读取数据并构建体系二级索引条目)2.合并排序阶段3.插入到阶段(将排序记录插到二级索引)在5.6版本之前,MySQL通过四次直接插入一条记录来构建二级索引。这是一种“从上而下”的方法。搜索插到位置从树的根部(顶部)就开始并达到叶页(底部)。该记录直接插入光标打向的叶页上。在查找直接插入位置和进行业面word文档合并和合并方面开销不大。从MySQL5.7结束,添加索引期间的插到阶段不使用“排序索引形成完整”,也一般称“批量索引读取”。在这种方法中,索引是“由外及里”最终形成的。即叶页(底部)简单的方法构建,后再非叶级别待到根(顶部)。
示例
在这些情况下不使用排序的索引统合:
ALTERTABLEt1ADDINDEX(求求求CREATEINDEX)
ALTER TABLE t1 ADD FULLTEXT INDEXALTER TABLE t1 ADD COLUMN,ALGORITHM INPLACE
OPIMIZEt1
对于到最后两个业务应用程序,ALTER会创建角色一个中间表。中间表索引(主要和都无所谓)在用“排序索引统合”统合。
算法
在0级别创建页,还要甚至于页创建战队一个游标
使用0级别处的游标插入到页面,等到填进
页面被填满后,修改一个兄弟页(千万不能插到到兄弟页)
为当前的整页创建战队节点指针(子页中的大于键,子页码),并将节点指针再插入上一级(父页)
在较高级别,检查游标有无已gprs定位。假如没有,请为该级别创建战队父页和游标
在父页插到节点指针
假如父页已塞满,请重复一遍步骤3,4,5,6
现在再插入兄弟页并使游标指向兄弟页
在所有再插入的末尾,每个级别的游标朝最右边的页。再提交所有游标(意味着什么再提交可以修改页面的迷你型事务,能量所有锁存器)
为简单起见,上列算法跳过了或是压解页和BLOB(外部存储的BLOB)如何处理的细节。
通过由下的最终形成索引为简单点起见,假设不成立子页和非子页中容许的最大记录数为3
CREATETABLEt1(aINT PRIMARY KEY,b INT,c BLOB);
INSERTINTOt1VALUES(1,11,嗨小伙伴们111);
INSERTINTOt1VALUES(2,22,hello!222);
INSERTINTOt1VALUES(3,33,hello,hello333);
INSERTINTOt1VALUES(4,44,hello!444);
INSERTINTOt1VALUES(5,55,嗨小伙伴们555);
INSERTINTOt1VALUES(6,66,hi~666);
INSERTINTOt1VALUES(7,77,hello!777);
INSERT INTO t1 VALUES(8,82,hello!888);
INSERTINTOt1VALUES(9,99,嗨小伙伴们999);
INSERTINTOt1VALUES(10,1010,hi~101010);
ALTERTABLEt1ADDINDEXk1(b);
InnoDB将主键字段赏分到二级索引。二级索引k1的记录格式为(b,a)。在排序阶段成功后,记录为:
(11,1),(22,2),(33,3),(44,4),(55,5),(66,6),(77,7),(78,8),(99,9),(1010,10)
初始再插入阶段
让我们从有记录(11,1)正在。
在0级别(叶级别)创建家族页
修改一个到页的游标
所有插到都将转到此页面,待到它填满了
箭头不显示游标当前朝的位置。它目前位处第5页,下一个插入到将投到此页面。
还有两个闲时插槽,所以再插入记录(22,2)和(33,3)的很简单点是对下一条记录(44,4),页码5已满(前面提到的假设大的记录数为3)。这那是步骤。页填充时的索引统合
创建家族一个兄弟页,页码6
别直接插入兄弟页
在游标处递交页面,即小巧事务提交,释放出锁存器等
才是再提交的一部分,创建角色节点指针并将其插到到【当前级别1】的父页面中(即在1级别)
节点指针的格式(子页面中的最大值键,子页码)。第5页的小于键是(11,1)。在父级别再插入记录((11,1),5)。
1级别的父页尚不存在,MySQL创建家族页码7和打向页码7的游标。
将((11,1),5)直接插入第7页
现在,返回到0级并修改从第5页到第6页的链接,道理一样
0级别的游标现在打向兄弟页,页码为6
将(44,4)插入到第6页
下另一个直接插入-(55,5)和(66,6)-很简单,它们回到第6页。
插入记录(77,7)类似(44,4),之外父页面(页面编号7)巳经修真者的存在因此它有两个以上记录的空间。首先将节点指针((44,4),8)插到第7页,后再将(77,7)有记录到同级8页中。
插到记录(89,8)和(99,9)很简单点,因为第8页有两个多余的时间插槽。
下另一个直接插入(1010,10)。将节点指针((77,7),8)插入1级别的父页(页码7)。MySQL在0级创建战队同级页码9。将记录(1010,10)插到第9页并将光标可以修改这一点页面。以此类推。在上面的示例中,数据库在0级别重新提交到第9页,在1级别并提交到第7页。
我们现在有了三个求下载的B-tree索引,它是自下诚信立院统合的!
索引再填充因子全局变量innodb_fill_factor应用于设置里插入到B-tree页中的空间量。默认值为100,它表示在用整个业面(不和页眉)。聚簇索引更具innodb_fill_factor100的无需承担项。在这种下,聚簇索引也空间的1/16尽量空闲。即6.25%的空间用于未来的DML。
值80意味着MySQL建议使用了80%的页空间填充,确认好20%于未来的更新。如果不是innodb_fill_factor100则没有余下空间供未来插入二级索引。如果不是在再添加索引后,希望表上有更多的DML,则可能导致业面全部拆分并再一次单独设置。在情况下,我建议你建议使用80-90之间的值。此变量还会影响不大在用OPTIMIZETABLE和ALTER TABLE DROP COLUMN,ALGOITHMINPLACE重新创建战队的索引。也不可能可以设置太低的值,比如少于50。是因为索引会占用资源实在是浪费更多的磁盘空间,值较低时,索引中的页数较多,索引统计信息的采样肯定又不是最佳的。优化器可以你选更具次优统计信息的错误查询计划。
排序索引构建的优点
没有页面表格合并(不包括压解表)和合并
没有反复重复搜索插入位置
插到绝对不会被系统重装记录(页分配.),而重装日志子系统的压力较小
缺点
ALTER正在进行时,插入到性能降底Bug#82940,但在后续版本中计划修复。
sock 文件如何生成?
3种比较普遍的情况
链接信息的参数有不对的,比如,密码错了等。解决方案,这个帐号用mysqlclient工具测试连接上帮一下忙。
sock文件在mysql中配置(象在文件中配置)的与MySQLdb默认去连的并非上网通路径。解决方案,(userroot,dbmysql,passwd111,hostlocalhost,unix_socket{path_did_sock})
服务什么也没开起来。