其他

深拷贝与浅拷贝

在Python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,Python并没有拷贝这个对象,而只是拷贝了这个对象的引用。 1、浅拷贝:利用切片操作、工厂方法list方法拷贝 2、深拷贝:利用copy中的deepcopy方法进行拷贝 一、浅拷贝 如下,浅拷贝操作: b通过切片操作拷贝a c通过工厂方法拷贝a 由上,从a、b、c的id值来看,三者是不...

MySQL实例搭建

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、数据库工作原理概述   用户连接到数据库里,对数据库进行操作,将磁盘里数据库中的数据读取到内存中(物理读),内存中的数据被用户读取(内存读),内存读的速度(基本可忽略)是物理读的速度的好几万倍。   数据库之所以快的原因是,数据库有一个大的内...

SQL执行过程中的性能负载点

一、SQL执行过程   1、用户连接数据库,执行SQL语句;   2、先在内存进行内存读,找到了所需数据就直接交给用户工作空间;   3、内存读失败,也就说在内存中没找到支持SQL所需数据,就进行物理读,也就是到磁盘中查找;   4、找到的数据放到内存中,在内存进行数据过滤再放到会话工作空间。   5、假设会话工作空间需要暂存结果集进行排序,但空间不足的话,就会借用磁盘tmpdir,最后再将结果返回给用户。 注:   用户会话空间是内存中分配出来的一个工作空间,而innodb_buffer_pool是innodb存储引擎在内存中的一个缓冲池。 一个SQL执行速度快并不能说明这个S...

MySQL存储写入速度慢分析

一、存储结构分析 MySQL存储结构图: 解析:   1、读操作:内存读–>cache缓存读–>磁盘物理读     读取到的数据会按上述顺序往回送。   2、写操作:内存数据直接写入cache缓存(非常快)–>写入disk 由上可知,MySQL之所以读写速度快,cache在其中起到了关键作用。 1、Cache缓存特点:   1、速度快   2、掉电数据丢失     3、容量有限 2、保护数据安全(防止意外掉电的数据丢失)应对措施:   在存储中,增加BBU(电池备份单元,...

关于MySQL的commit非规律性失败案例的深入分析

案例描述:   一个普通的事务提交,在应用里面会提示commit超时,失败。 一、理论知识 1、关于commit原理,事务提交过程   1、寻找修改的数据页:     1、如果该数据页在内存中,则直接是内存读;     2、如果该数据页内存中没有,物理读,就从磁盘调入内存;   2、磁盘中的undo页调入内存;   3、先将原来的数据存入undo,然后修改数据(数据页成脏页);   4、修改数据的信息生成redo数据存入log_buffer(内存中的一个空间,默认16M)中;   5、log_buffer通过log线程(后台线程...

MySQL存储写入性能严重抖动分析

案例描述:   通过iostat发现存储的写性能长期维持在10MB左右,而且因为写性能差已经导致数据库性能变差;   两个小时以后,iostat发现系统的写性能已经能够到100MB以上,数据库性能也恢复正常。 也就是说,在对系统、数据库监控中,出现了性能波谷,存储写入性能严重抖动,为什么? 一、原理过程 由上原理图,进行过程解析:   1、事务提交,修改buffer_pool中的数据形成脏页,并且同时生成redo日志,将日志写入磁盘redo log中;   2、事务提交成功; 假设,有三组redo log文件,   3、继续事务提交,修改数据,写redo log,如果innodb_log_fi…

MySQL IO线程及相关参数调优

一、关于一个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、内存读,然后进行物理读,读取…

MySQL后台线程的清理工作

后台清理工作:脏页刷盘、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开始支持多线程刷脏页…

InnoDB关键特性之change buffer

一、关于IOT:索引组织表   表在存储的时候按照主键排序进行存储,同时在主键上建立一棵树,这样就形成了一个索引组织表,一个表的存储方式以索引的方式来组织存储的。   所以,MySQL表一定要加上主键,通过主键来访问MySQL表的性能是最好:     1、显式定义主键:primary key     2、隐式定义主键:如果没有指定主键,MySQL自己会默认建立一个主键(rowid隐藏主键) 1、特点   1、表按照主键排好序,数据按照主键顺序存放(核心原因)   2、主键上有一棵树,叶子节点就是数据节点   3、表本身就是索引,表就是索引、索引就是表   4、IOT对于通过主键找表数据的成本最…