当前位置: 首页 > wzjs >正文

网站推广方案策划顺义建站好的公司

网站推广方案策划,顺义建站好的公司,安溪县住房和城乡建设网站,泊头市网站建设公司文章目录innodb引擎和memory引擎对比对比sql 语句:尽可能不使用函数条件隐式转换隐式类型转换隐式字符编码转换补充问题事务与长事务ACIDread viewMVCC 一致性视图当前读view 虚拟表长事务的影响与排查影响排查方法预防innodb引擎和memory引擎对比 innodb引擎是索引…

innodb引擎和memory引擎对比

innodb引擎是索引组织表(B+树),memory引擎是堆组织表(数组)

memory引擎数据结构

在这里插入图片描述
图片来自极客时间 丁奇 MySQL实战45讲

对比

  • 内存表按照写入顺序 顺序存放,innodb表数据有序存放
  • 内存表重启mysql就没了,innodb重启了还在
  • 内存表锁粒度粗,表锁;innodb有行锁
  • 写入数据:内存表里有空位就可以随便放数据,innodb表要保证树的有序性,要在指定位置插入数据
  • 数据位置变化时,内存表所有索引都要改(因为每个索引都直接指向数据的物理位置),innodb只用改主键索引(二级索引存的是主键索引位置,不用改)
  • 内存表所有索引地位相同,arr[index]取数据;innodb表二级索引地位低于主键索引
  • 内存表每个元素类型相同,都是arr item的统一类型;innodb表每个字段类型可以不同

sql 语句:尽可能不使用函数条件

使用函数条件会导致索引优化不能用,引起全表扫描。因为函数字段破坏索引的有序性。比如:

select  id, name from t where id+1 > 200 (where部分是函数表达式,no no no)
select count(*) from t where month(time)=7; 

隐式转换

隐式类型转换

隐式类型转换也相当于函数处理,会导致索引无效,比如:

select * from tradelog where tradeid=110717; // tradeid是varchar类型
// 这个操作就相当于在做数值比较,tradeid会先转成int类型再和110717比较 等价  CAST(tradid AS signed int) = 110717;
// 这个语句会走全表扫描
隐式字符编码转换

隐式字符编码转换,比如:t1的字符集是utf8mb4,t2的字符集是utf8;utf8mb4是utf8的超集。两个表字段进行比较时,utf8会先调用函数转utf8mb4再比较

如果调用时函数作用在参数上就不影响索引选择,但函数作用在列上,就会导致索引失效

// 索引失效
select t2.* from t1, t2 where t1.aid=t2.aid and t1.id=2; 
// 步骤:在t1表上拿到t1.id这行aid(utf8mb4);到t2表上找到t2.aid=utf8mb4 aid对应的行,转换字符集 => 找CONVERT(t2.aid USING utf8mb4) = $(t1.aid).value(参数常量)
// 函数作用在索引字段上,索引失效// 不影响索引
select t1.c from t1, t2 where t1.aid=t2.aid and t2.id=4;
// 步骤:在t2表上拿到t2.id这行的aid(utf8);到t1表上找t1.aid=utf8 aid对应的行,转换字符集 => 找t1.aid=CONVERT($(t2.aid).value USING utf8mb4) (参数常量)
补充问题
`b` varchar(10) DEFAULT NULLselect * from table_a where b='1234567890abcd';
// 不是直接找不到,而是扫描行 找 然后 对比,最后发现找不到。执行步骤:截断查找1234567890(10位),innodb找到了回到server层对比,不相等,循环 最后失败

事务与长事务

ACID

Aatomicity原子性事务中的所有操作统一成功,统一失败 // 部分失败就需要回滚 undolog
Cconsistency一致性
Iisolation隔离性mvcc一致性视图
Ddurability持久性永久保存,故障恢复(redo log)
  • 存储引擎执行语句时默认都会开启事务;只读操作不开启事务

  • 读(select … for update, select … lock in share mode)写操作默认开启事务

  • 默认set autocommit=1 // 自动提交;如果业务设置了set autocommit=0需要显示的commit才能提交事务

    • set autocommit=0容易导致意外的长事务
  • begin;时只是做了记录,到执行第一条读写语句时才真正开启事务,分发事务ID

    • 只读事务部分发事务ID,事务ID是为了处理写操作冲突问题
  • 马上启动事务语句:start transaction with consistence snapshot; // 创建一致性视图

    • 可重复读级别下才有一致性视图,读已提交下该语句等价start transaction;

read view

innodb中有两种视图:mvcc 一致性视图、view 虚拟表

MVCC 一致性视图
  • MVCC是为了解决事务ACID中的I isolation隔离性出现的
  • 历史数据不是直接存在的,而是通过undo log版本链在需要时计算出来的
    • undo log 实现秒级快照

go 原子操作、加锁、MVCC多版本并发控制_mvcc golang-CSDN博客

当前读
begin; // 假设创建可重复读级别的视图// Q1:在undo log上,拿着活跃列表走过不可见事务直至找到第一个可见事务,读这条数据
select * from t where id = 5; // 可重复读// Q2:更新数据前都要查一次数据,读是当前读:读最新的数据
update table t set c = 6 where id = 5; // 当前读// 自己的update对自己可见,所以此时读到的数据是Q2更新后的数据,与Q1时不同
select * from t where id = 5; commit;

select … for update(写锁)、select … lock in share mode(读锁)也是当前读。

view 虚拟表

查询语句定义的虚拟表,相当于持久化的查询语句别名。在调用时执行查询语句并生成结果。

虚拟表只存储查询定义,不存储实际数据。

长事务的影响与排查

影响
  • 长期占用连接,内存不释放,变大

    • 内存不是在使用完后释放,而是在连接断开或重置时释放
  • 长事务阻塞后续操作,

    • 可能导致线程用满 // 都等着执行,但长事务占着资源
    • 可能引起后续查询慢,比如长事务update id=1的数据10万次,没执行完成时select * from t where id = 5;需要在undo log链表上往前找10万多次才能找到需要返回的数据
  • 主从延迟 主库执行长事务10分钟,再发到从库去执行

    • 无法应用从库并行复制能力
  • 崩溃恢复时间长 可能因为 长事务回滚

排查方法

  • 是否set autocommit=0

    • 随便查个业务,通过general_log看是不是没有commit
  • information_schema.Innodb_trx 监控这个表,看长事务阈值

    select * from information_schema.innodb_trx where TIME_TO_SEC(timediff(now(),trx_started))>60
    

预防

  • 业务执行设置超时时间

  • 长事务会导致undo log很大,innodb_undo_tablespaces = 2(2个独立的表空间文件), 方便回滚清理

http://www.dtcms.com/wzjs/834531.html

相关文章:

  • 台州网站推广排名关于做网站电话销售
  • 中劵资本集团股票交易网站建设中有服务器怎么做网站教程
  • 怎样建设网站?(怎样注册域名?如何选择主机?网站应有哪些功能模块免费html网页源代码
  • 济南自助建站新闻头条最新消息30字
  • 免费模板网站做网站后有人抢注品牌关键字
  • 东兴网站建设南阳企业网站制作
  • 网站做两个月百度没有录取建网站需要几程序员
  • 深圳市建设局网站张局物联网官网入口
  • 漳州微信网站开发百度一下官方网站
  • 网站关键词做排名不分核酸检测收费
  • 中国建设银行网站缴费系统wordpress 做票务系统
  • 网站 做购物车企业年度报告公示系统
  • 外贸门户网站建设龙里县建设局管方网站
  • 有源码如何做网站商务网站建设策略
  • 山西做网站价格网站备案是什么一回事
  • 财政网站 建设方案做媛网站
  • 手机网站免费建设平台wordpress打不开
  • 网站建设设计团队金蝶进销存管理系统
  • 如何做配音网站江门网站推广哪家好
  • 怎样创建网站直播接口莱芜金点子信息港最新招聘人才
  • 网站建设丿金手指下拉如何做推广引流赚钱
  • aje网站润色九亭镇村镇建设办官方网站
  • 苏州网站建设设计公司哪家好重庆网站推广软件
  • 深圳龙华大浪做网站公司做企业官网哪家公司好
  • xml网站地图在线生成工具手机界面app界面设计分析
  • 论述网站建设整个流程做二手钢结构网站有哪些
  • 在线一键建站系统营销型网站制作哪家好
  • 网页美工培训班咸阳seo优化
  • 石家庄网站平台网站建设设计规划
  • 莘县网站制作服装网站建设项目维护与评价书