MySQL-NULL
参考文献
技术分享 | MySQL默认值选型(是空,还是 NULL)
NULL值
在 MySQL 中的 NULL 是一种特殊的数据.一个字段是否允许为 NULL,字段默认值是否为 NULL.
字段类型
表定义中设置方式
字段值
数值类型 (INT/BIGINT)
Default NULL / Default 0
NULL / NUM
字符类型 (CHAR/VARCHAR)
Default NULL / Default ” / Default ‘ab’
NULL / ” / String
NULL 与空字符存储上的区别
表中如果允许字段为 NULL,会为每行记录分配 NULL 标志位.NULL 除了在每行的行首存有 NULL 标志位,实际存储不占有任何空间.如果表中所有字段都是非 NULL,就不存在这个标示位了
NULL的问题
数值类型,以 INT 列为例
在 min / max / sum / avg 中 NULL 值会被直接忽略掉
对 NULL 做加减操作,如 1 + NULL,结果仍是 NULL
order by 以升序检索字段的时候 NULL ...
MySQL-表维护
参考文献
MySQL 8.0 Cookbook
An Overview of DDL Algorithm’s in MySQL ( covers MySQL 8)
17.12.1 Online DDL Operations
表维护
使用Percona工具包
修改表结构
MySQL-Security
参考文献
MySQL 8 Cookbook
使用mysql_config_editor进行无密码认证
1234567891011121314151617181920212223242526272829mysql_config_editor --helpmysql_config_editor Ver 1.0 Distrib 5.7.24, for osx11.1 on x86_64Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.MySQL Configuration Utility.Usage: mysql_config_editor [program options] [command [command options ...
MySQL-binlog
参考文献
MySQL技术内幕 InnoDB存储引擎
MySQL 8 Cookbook
binlog
什么是binlog?
二进制日志包含数据库的所有更改记录,包括数据和结构两方面.二进制不记录SELECT或SHOW等不修改数据的操作.
运行带有二进制日志的服务器会带来轻微的性能影响.二进制日志能保证数据库出现故障时数据是安全的.
只有完整的事件或事务才会被记录或者回读.
binlog格式
该参数可设的值有STATEMENT,ROW,MIXED.
STATEMENT模式下,每一条会修改数据的sql都会记录在binlog中.不需要记录每一行的变化,减少了binlog日志量,节约了IO,提高性能.由于sql的执行是有上下文的,因此在保存的时候需要保存相关的信息,同时还有一些使用了函数之类的语句无法被记录复制.
ROW格式,二进制日志记录的不再是简单的SQL语句了,而是记录表的行更改情况.从MySQL5.1版本开始,如果设置了binlog_format为ROW,可以将InnoDB的事务隔离级别设置为READ COMMITTED,以获得更好的并发性.
MIXED格式,默认 ...
MySQL-redo log
参考文献
千金良方: MySQL性能优化金字塔法则
redo log
redo log用来实现事务的持久性,即事务ACID的D.其由两部分组成:
一是内存中的重做日志缓冲(redo log buffer),其是易失的
二是重做日志文件(redo log file),其是持久的.
InnoDB是事务的存储引擎,其通过Force Log at Commit机制实现事务的持久性,即当事务提交(COMMIT)时,必须先将事务的所有日志写入到重做日志文件进行持久化,待事务的COMMIT操作完成才算完成.
redo log基本上都是顺序写的,在数据库运行时不需要对redo log的文件进行读取操作,而undo log是需要进行随机读写的.
WAL(Write-Ahead Logging),它的关键点就是先写日志,再写磁盘.
当有一条记录需要更新的时候,InnoDB引擎就会先把记录写到redo log里面,并更新内存,这个时候更新算完成了.同时,InnoDB引擎会在合适的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做.
InnoDB的red ...
MySQL-undo log
参考文献
undo log
MySQL-sys
参考文献
千金良方: MySQL性能优化金字塔法则
sys系统库使用基础环境
因为sys系统库提供了一些代替直接访问performance_schema的视图,所以必须启用performance_schema(将performance_schema系统参数设置为ON),sys系统库的大部分功能才能正常使用
要完全访问sys系统库,用户必须具有以下权限.
对所有sys表和视图具有SELECT权限.
对所有sys存储过程和函数具有EXECUTE权限.
对sys_config表具有INSERT、UPDATE权限.
对某些特定的sys系统库存储过程和函数需要额外权限,如ps_setup_save()存储过程,需要与临时表相关的权限.
还要有与被sys系统库执行访问的对象相关的权限.
任何被sys系统库访问的performance_schema表都需要有SELECT权限,如果要使用sys系统库对performance_schema相关表执行更新,则需要有performance_schema相关表的UPDATE权限.
INFORMATION_SCHEMA.INNODB_BUF ...
MySQL-performance_schema
参考文献
千金良方: MySQL性能优化金字塔法则
performance_schema
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117mysql> show tables ;+------------------------------------------------------+| Tables_in_performance_schema |+------------------------------------------------------+| accounts ...
MySQL-Window Functions
参考文献
14.20 Window Functions
14.20.1 Window Function Descriptions
Window Functions
语法
12345678910111213141516171819202122232425262728293031323334353637over_clause: {OVER (window_spec) | OVER window_name} window_spec: [window_name] [partition_clause] [order_clause] [frame_clause] partition_clause: PARTITION BY expr [, expr] ... order_clause: ORDER BY expr [ASC|DESC] [, expr [ASC|DESC]] ...frame_clause: frame_units frame_extentframe_units: {ROWS | RANGE ...
MySQL Tools-Percona Toolkit
参考文献
千金良方: MySQL性能优化金字塔法则
https://docs.percona.com/percona-toolkit/installation.html
Percona Toolkit
pt-query-digest
使用pt-query-digest工具可以通过慢查询日志、普通查询日志、binlog对MySQL中的查询语句进行分析,也可以通过SHOW PROCESSLIST语句输出信息,以及tcpdump 抓取的MySQL协议数据对MySQL中的查询语句进行分析.
解析慢查询日志
1# pt-query-digest 54be3b45aab9-slow.log > slow-report.log
命令自动补全
bash情况下
创建/etc/bash_completion.d/percona_toolkit或者创建~/.bash_completion.d/percona_toolkit
1234567891011121314#!/bin/bash_pt_commands(){ local cur COMPREPLY=() c ...