深拷贝与浅拷贝
在Python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,Python并没有拷贝这个对象,而只是拷贝了这个对象的引用。 1、浅拷贝:利用切片操作、工厂方法list方法拷贝 2、深拷贝:利用copy中的deepcopy方法进行拷贝 一、浅拷贝 如下,浅拷贝操作: b通过切片操作拷贝a c通过工厂方法拷贝a 由上,从a、b、c的id值来看,三者是不...
在Python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,Python并没有拷贝这个对象,而只是拷贝了这个对象的引用。 1、浅拷贝:利用切片操作、工厂方法list方法拷贝 2、深拷贝:利用copy中的deepcopy方法进行拷贝 一、浅拷贝 如下,浅拷贝操作: b通过切片操作拷贝a c通过工厂方法拷贝a 由上,从a、b、c的id值来看,三者是不...
Q:如何判断一个Linux系统具备安装MySQL的条件? A: 1、Linux网络已经配置完成 ip地址/子网掩码、默认网关、主机名字 /etc/hosts:访问这个数据库的应用的IP地址和主机名字也要添加到hosts文件中,主从服务器解析也要添加到hosts文件 /etc/resolv.conf:确认里面的nameserver能够使用 2、/var/log/messages日志文件 3、配置yum源:local 注意:轻易不要使用互联网yum,原因是容易出现版本问题 4、删除旧版本的MySQL: # yum remove ...
Q:何为“数据库”? A: 也就是说数据库实例,“数据库” = 数据库软件 + 数据库:存于磁盘中 1、数据库里面存表:放置在datadir目录下 2、软件是用来管理数据库的:放置在basedir目录下 3、数据库工作原理概述 用户连接到数据库里,对数据库进行操作,将磁盘里数据库中的数据读取到内存中(物理读),内存中的数据被用户读取(内存读),内存读的速度(基本可忽略)是物理读的速度的好几万倍。 数据库之所以快的原因是,数据库有一个大的内...
MySQL用户会话及连接线程
一、SQL执行过程 1、用户连接数据库,执行SQL语句; 2、先在内存进行内存读,找到了所需数据就直接交给用户工作空间; 3、内存读失败,也就说在内存中没找到支持SQL所需数据,就进行物理读,也就是到磁盘中查找; 4、找到的数据放到内存中,在内存进行数据过滤再放到会话工作空间。 5、假设会话工作空间需要暂存结果集进行排序,但空间不足的话,就会借用磁盘tmpdir,最后再将结果返回给用户。 注: 用户会话空间是内存中分配出来的一个工作空间,而innodb_buffer_pool是innodb存储引擎在内存中的一个缓冲池。 一个SQL执行速度快并不能说明这个S...
MySQL缓存之Qcache与buffer pool对比
一、存储结构分析 MySQL存储结构图: 解析: 1、读操作:内存读–>cache缓存读–>磁盘物理读 读取到的数据会按上述顺序往回送。 2、写操作:内存数据直接写入cache缓存(非常快)–>写入disk 由上可知,MySQL之所以读写速度快,cache在其中起到了关键作用。 1、Cache缓存特点: 1、速度快 2、掉电数据丢失 3、容量有限 2、保护数据安全(防止意外掉电的数据丢失)应对措施: 在存储中,增加BBU(电池备份单元,...
案例描述: 一个普通的事务提交,在应用里面会提示commit超时,失败。 一、理论知识 1、关于commit原理,事务提交过程 1、寻找修改的数据页: 1、如果该数据页在内存中,则直接是内存读; 2、如果该数据页内存中没有,物理读,就从磁盘调入内存; 2、磁盘中的undo页调入内存; 3、先将原来的数据存入undo,然后修改数据(数据页成脏页); 4、修改数据的信息生成redo数据存入log_buffer(内存中的一个空间,默认16M)中; 5、log_buffer通过log线程(后台线程...
案例描述: 通过iostat发现存储的写性能长期维持在10MB左右,而且因为写性能差已经导致数据库性能变差; 两个小时以后,iostat发现系统的写性能已经能够到100MB以上,数据库性能也恢复正常。 也就是说,在对系统、数据库监控中,出现了性能波谷,存储写入性能严重抖动,为什么? 一、原理过程 由上原理图,进行过程解析: 1、事务提交,修改buffer_pool中的数据形成脏页,并且同时生成redo日志,将日志写入磁盘redo log中; 2、事务提交成功; 假设,有三组redo log文件, 3、继续事务提交,修改数据,写redo log,如果innodb_log_fi…
一、关于一个SQL的简单的工作过程 1、工作前提描述 1、启动MySQL,在内存中分配一个大空间innodb_buffer_pool(还有log_buffer) 2、多用户线程连接MySQL,从内存分配用户工作空间(其中排序空间) 3、磁盘上有数据库文件、ib_logfile、tmp目录、undo 2、SQL的简易流程 1、DQL操作 1、首先进行内存读 2、如果buffer pool中没有所需数据,就进行物理读 3、物理读数据读入buffer pool,再返回给用户工作空间 2、DML操作(例update) 1、内存读,然后进行物理读,读取…
后台清理工作:脏页刷盘、undo回收 1、page cleaner thread:刷新脏页 2、purge thread:清空undo页、清理“deleted”page 一、innodb_page_cleaners page cleaner线程从buffer pool中刷脏页的线程数量。 1、5.7新特性 1、5.6版本以前,脏页的清理工作交由master线程的; 2、Page cleaner thread是5.6.2引入的一个新线程(单线程),从master线程中卸下buffer pool刷脏页的工作独立出来的线程(默认是启一个线程); 3、5.7开始支持多线程刷脏页…
一、关于IOT:索引组织表 表在存储的时候按照主键排序进行存储,同时在主键上建立一棵树,这样就形成了一个索引组织表,一个表的存储方式以索引的方式来组织存储的。 所以,MySQL表一定要加上主键,通过主键来访问MySQL表的性能是最好: 1、显式定义主键:primary key 2、隐式定义主键:如果没有指定主键,MySQL自己会默认建立一个主键(rowid隐藏主键) 1、特点 1、表按照主键排好序,数据按照主键顺序存放(核心原因) 2、主键上有一棵树,叶子节点就是数据节点 3、表本身就是索引,表就是索引、索引就是表 4、IOT对于通过主键找表数据的成本最…