2020年1月

https://blog.csdn.net/zhu19774279/article/details/38645663

  1. 硬件

今天,大数据集(largedatasets)的内存一般都是数以百G,即使是T级别也没什么好惊讶。MySQL需要足够多的内存,以提供最佳性能,如缓存热点数据、索引、大量变化(ongoing changes)。InnoDB有更短的响应时间,并能以更合理的方式利用磁盘IO。从CPU来看,当然是核越多、速度越快越好。32/64核的CPU已经越来越普遍,最新版本的MySQL在对多核CPU的支持上也比以前的版本要好得多。再来看存储,SSD正在取代传统的机械硬盘,并获得了巨大的成功,当然这是用钱来换最好的性能。RAID 10仍然是多数情况下的首选,但要确保你的RAID控制器能够很好的支持SSD硬盘,以免成为瓶颈。当然如果你对IOPS有很高的需求,可以选择多个PCI-e Flash卡。

  1. 操作系统

Linux是最常见的高性能MySQL的服务器。请确保使用最新的内核和现代的文件系统,如EXT 4或XFS。两种文件系统都有各自的优缺点:如XFS删大文件时比较快,EXT4却能让SSD硬盘有更好的性能。选择权在你手上。这篇文章(www.ssdperformanceblog.com/2013/04/testing-the-micron-p320h/)(很奇怪这个网站用Firefox、chrome或IE都打不开,翻墙也打不开,实在不知道什么原因——译者注)告诉你如何让EXT4比XFS有更好的性能。当你的表特别多,而你又使用了innodb_file_per_table参数的时候,noatime和nodiratime将会给你带来一点点的性能提升。Linux的默认I/O调度程序是CFQ(Completely Fair Queuing),实际上多数情况下Noop/Deadline有更好的性能。对于MySQL专用服务器,将swappiness设为0是一个不错的选择,因为这可以降低swapping的延迟。要确保MySQL的主机不会出现内存不足的情况。swapping对MySQL是有害的,并且会阻止内存中的缓存。想了解更多有关swapping的知识,可以阅读这篇文章(www.mysqlperformanceblog.com/2008/04/06/should-you-have-your-swap-file-enabled-while-running-mysql/)。

  1. MySQL InnoDB 配置

从5.5开始,InnoDB是默认的引擎,所以这些参数能够比以前更好的优化性能。最重要的是以下这些:

    innodb_buffer_pool_size:缓冲池对InnoDB的影响很大,一定要配置正确,因此要给这个值分配足够的内存。通常是可用内存的70%-80%。更确切地说,如果你的内存比数据集大那么一点,那么让这个值比数据库的大小大一点最好,当然你需要注意数据库大小的增长,并经常调整innodb缓冲池的大小,使二者大小保证一致。(这句话没看太懂,原文是:More precisely, if you have RAM bigger than your dataset setting itbit larger should be appropriate with that keep in account of your databasegrowth and re-adjust innodb buffer pool size accordingly.)如果你用的是PerconaServer 5.1或Percona Server 5.5,那么在代码级别对InnoDB的缓冲有优化,相关知识可以看这篇文章http://www.percona.com/doc/percona-server/5.5/scalability/innodb_split_buf_pool_mutex.html。

    innodb_buffer_pool_instances:InnoDB1.1和MySQL5.5中介绍了多Innodb缓冲池。5.5中这个值默认大小是1,而5.6中是8。这个参数的取值范围是1-64。在高并发的任务中允许使用innodb_buffer_pool_instances会非常有效,因为它能够减少全局互斥锁(global mutexes)的存在。(这个参数在CentOS版的MySQL-5.5.39的配置文件中没有,不知原文作者说的5.5中的默认值哪来的——译者注)

    Dump/Restore Buffer Pool:这个参数能够在重启时,提高保存、恢复缓冲池内容的速度。这个特性最早出现在Percona Server 5.5中,可以通过这两篇文章做进一步了解(http://www.percona.com/doc/percona-server/5.5/management/innodb_lru_dump_restore.html?id=percona-server:features:innodb_lru_dump_restore,http://www.mysqlperformanceblog.com/2010/01/20/xtradb-feature-save-restore-buffer-pool/)。MySQL 5.6中也加入了该特性,要在数据库启动或关闭时自动dump数据,需要将innodb_buffer_pool_dump_at_shutdown和innodb_buffer_pool_load_at_startup设置为ON。

    innodb_log_file_size:足够大的InnoDB事务日志,对于稳定的、高质量写性能至关重要。但巨大的日志文件同样意味着崩溃以后的恢复会很慢。当然,在5.5进行巨大改进以后,这一点已经不再是经常争论的重点。MySQL 5.6将默认值从5MB调整到50MB,但这个值对于很多情况依然太小。另外,在MySQL 5.6中,如果这个参数值被改变,那么MySQL将会在重启的时候自动调整大小。在MySQL 5.6中,合并后的日志文件大小从4G调整到512G。有关日志最佳大小的问题,可以阅读这篇文章(http://www.mysqlperformanceblog.com/2008/11/21/how-to-calculate-a-good-innodb-log-file-size/)

    innodb_log_buffer_size:InnoDB的写操作,将数据写入到内存中的日志缓存中,由于InnoDB在事务提交前,并不将改变的日志写入到磁盘中,因此在大事务中,可以减轻磁盘I/O的压力。通常情况下,如果不是写入大量的超大二进制数据(a lot of huge blobs),4MB-8MB已经足够了。

    innodb_flush_log_at_trx_commit:这个值设为1时,将会在每次日志提交时,将日志缓冲(log buffer)中的内容刷入硬盘,以确保数据最大限度的完整性,当然这样也会对性能带来影响。如果设为2,表示每次日志提交时,仅仅将日志缓冲中的内容刷入操作系统的文件缓存。如果你对ACID不那么关注,并且对于OS崩溃前最后一两秒的事务丢失不那么在意的话,设为2将带来更好的性能。

    innodb_thread_concurrency:随着InnoDB的改善,现在推荐大家使用默认值0,即由InnoDB引擎自己控制并发。如果你看到并发相关的讨论,可以调整这个参数。推荐值的简单计算方法是(CPU的数量+硬盘数量)*2(2 times the number of CPUs plus the number of disks)。这是一个动态变量,这意味着改变这个值不用重启MySQL即可生效。

    innodb_flush_method:DIRECT_IO能减轻I/O的压力。直接I/O不进行缓存,如果设置为O_DIRECT可以避免缓冲池与文件系统的双缓冲,但是需要有RAID控制器以及电池备份的写缓存。(原文不是这样,但原文没看太懂Given that you have hardware RAID controller and battery-backedwrite cache.)

    innodb_file_per_table:从MySQL 5.6开始,这个值默认是ON。这个是默认值是因为可以避免产生巨大的共享表空间,并且可以在drop和truncate一张表的时候,迅速释放空间。独立的表空间同样在Xtrabackup的部分备份时有优势。

除了以上这些,Percona Server 5.5和MySQL 5.6对InnoDB有很多增强。在Percona Server 5.5的XtraDB中加入了Persistentoptimizer statistics,通过innodb_use_sys_stats_table参数控制,相关知识可以阅读这篇文章(http://www.percona.com/doc/percona-server/5.5/diagnostics/innodb_stats.html?id=percona-server:features:innodb_stats&redirect=1#innodb_use_sys_stats_table),在MySQL 5.6中也引入了这个特性。在MySQL5.6中,使用两个新表mysql.innodb_index_stats和mysql.innodb_table_stats来存储persistentstats。通过这个,在查询(query)的时候,能够保证更精确和一致性。更多细节请阅读文档这里http://dev.mysql.com/doc/refman/5.6/en/innodb-performance.html#innodb-persistent-stats。同样PerconaServer 5.5里介绍了来自于线程池的特性,可以阅读这个官方文档http://www.percona.com/doc/percona-server/5.5/performance/threadpool.html。另外线程池的知识还可以还可以阅读这里http://www.mysqlperformanceblog.com/2013/03/16/simcity-outages-traffic-control-and-thread-pool-for-mysql/

PerconaServer是免费且开源的。是在MySQL基础上修改的,上面有的特性只有Percona Server才有。

还有很多参数可以调整,但是在这篇文章我们只关注InnoDB。

  1. 为InnoDB优化应用程序

对于应用程序,尤其是以前使用MyISAM引擎的程序来说,需要进行以下调整。

首先,确保在更新操作(update)时使用事务,这样既可以保证一致性,也能够获得更好的性能。其次,如果你的程序有任何写操作,都应该要考虑可能发生的死锁。再次,请检查你的表结构,以确保他们能从InnoDB属性中获得性能改善,如:用主键聚集数据,所有索引都有主键(因此要保证主键短),用主键进行快速查找(试着使用join),大的未压缩的索引(使主键尽可能的简单。)(这一段话不太懂:clustering by primary key, having primary key in all indexes (sokeepprimary key short), fast lookups by primary keys (try to use it in joins),largeunpacked indexes(try to be easy on indexes).)

  1. 总结

本文几乎覆盖了所有和MySQL性能有关的参数,包括InnoDB的基础或进阶参数、OS的参数和硬件配置。通过这些修改,可以确保所有MySQL服务器的性能都得到优化。

1.查看docker版本
docker -v

2.查看镜像仓库中某个镜像
docker search docker镜像
镜像的核心概念

  • 容器技术募集硬件资源的目的,是为了运行软件,提供服务
  • 镜像是容器中运行软件的集合
    Docker镜像仓库: https://hub.docker.com/

3.镜像仓库中下载某个镜像
docker pull ubuntu

4.查看当前已经下载的镜像
docker images

根据"镜像ID"将镜像保存成一个tar文件:
docker save 镜像ID -o 输出文件名.tar

将本地tar镜像载入:
docker load -i 本地tar镜像文件名.tar

载入后会没有tag名称,需要更改tag
docker tag 镜像ID tag名称

5.查看当前所有容器
docker ps -a

6.启动一个新容器
docker run --name 容器名称 -p 宿主端口:容器端口 -d 镜像 -v 宿主数据目录:容器数据目录

跟随宿主主机启动容器
--restart=always

交互式进入容器:
docker exec -it 容器名称 /bin/bash

7.启动/重启/停止一个容器
docker start/restart/stop 容器ID

8.删除一个容器
docker rm -f 容器ID

9.查看运行容器中的进程信息
docker top 容器名称

10.优化Docker镜像代理

查看docker信息

docker info

11.将容器导出为压缩文件
docker export -o 保存文件.tar 容器id或容器名称

优化docker代理

vim /etc/docker/daemon.json
在daemon.json文件中输入以下代理配置
{"registry-mirrors":["https://obou6wyb.mirror.aliyuncs.com"]}

加载代理配置

加载代理配置

systemctl daemon-reload

重启docker服务

systemctl restart docker

查看docker信息 验证配置

docker info

通过KMS激活服务器激活windows

1.清除旧密钥
slmgr.vbs -upk
2.添加产品新密钥(windows server 2019 ServerStandard edition)
slmgr.vbs -ipk N69G4-B89J2-4G8F4-WWYCC-J464C
如果产品密钥没选对,则会出现错误

3.设置KMS激活服务器IP
slmgr.vbs -skms 10.1.45.250
4.开始激活
slmgr.vbs -ato
5.显示激活后信息
slmgr.vbs -dlv

一、windows server 2019零售版永久激活码:

Windows Server 2019 Datacenter Retail:

[Key]:RC4VN-4GQBW-WYPTV-3BD66-FVXR6

Windows Server 2019 Standard Retail:

[Key]:N3P28-TW9C9-69PWP-YQVC3-YBKR4

Windows Server 2019 Essential Retail:

[Key]:NMB98-MKJBC-FTVQ9-J3XK6-QYKTQ

二、Windows Server 2019批量授权版KMS客户端安装密钥Volume:GVLK

Windows Server 2019 Datacenter

[Key]:WMDGN-G9PQG-XVVXX-R3X43-63DFG

Windows Server 2019 Standard

[Key]:N69G4-B89J2-4G8F4-WWYCC-J464C

Windows Server 2019 Essential

[Key]:WVDHN-86M7X-466 P 6-VHXV7-YY726

一、windows server 2016零售版永久激活码

1、Windows Server 2016数据中心版零售版

Windows Server 2016 Datacenter Retail:

[Key]:6CNGG-BJP34-H923Y-6DMWR-37BMF

[Key]:HHRN4-BW4JY-GC9FP-TW3V8-7FT34

[Key]:DBNBR-9R8Q8-PPPT7-8J64C-MP3D4

[Key]:JD3N6-PXR8T-JQGRD-WVTXB-VQXQ4

2、Windows Server 2016标准版零售版

Windows Server 2016 Standard Retail:

[Key]:P96NB-8TJQB-BW47F-TQRMX-T839R

[Key]:QN6PR-XJQQK-KWRWK-8BC2T-6839R

[Key]:QXN3J-843V9-89VM3-KWXFJ-7FT3F

[Key]:RBKMW-YNB8P-WRC27-HK9BR-K4T3F

3、Windows Server 2016基础版零售版

Windows Server 2016 Essential Retail:

[Key]:XY9TM-N67HT-DDMJ7-M2HDW-82Q9J

[Key]:CTFPM-YN9D3-PT2CR-GTDJ4-8446W

二、windows server 2016批量授权版kms密钥

Windows Server 2016 KMS 客户端安装密钥

Windows Server 2016 Datacenter:CB7KF-BWN84-R7R2Y-793K2-8XDDG

Windows Server 2016 Standard:WC2BQ-8NRM3-FDDYY-2BFGV-KHKQY

Windows Server 2016 Essentials:JCKRF-N37P4-C2D82-9YXRT-4M63B

在Windows Server 2012 Core上安装SQL Server 2012 Core Edition

首先要谈一下为什么要在Core模式上安装SQL。主要原因就是-这是个服务器,不需要向客户端一样的华丽的GUI,只要安装配置完成之后,基本上不愿意对它进行操作。当然更重要的是对于服务器来说最重要的是性能、稳定性、安全性、可用性这些指标。从性能上来说其实Core模式上的SQL Server并没有什么变化,所以我更看重的是安全性和可用性。毕竟对于SQL Server来说GUI是不需要的,IE也是不需要的,这样相关的补丁就少多了,如果你仔细看微软的补丁,很多都与GUI相关。如果需要GUI完全可以通过远程管理的方式来实现。在客户端上安装服务器管理工具和SSMS,也就不会在意服务器是不是有GUI了。我们需要的就是服务器能在哪里老老实实的干活,究竟是什么模式?Who Care?另外有一点不得不说,在Core模式下安装SQL Server你只能选择通过命令行来进行安装,安装的速度快很多,之前安装SQL Server 2012多数时间都是在等待UI,从部署的效率来讲,Core模式是最佳选择。

整个安装的过程非常的简单,在虚拟机上安装Windows Server 2012 Core最多10分钟就能搞定。安装完成之后需要安装一下.net framework 3.5.1,这个安装可以通过dism命令来实现,只不过需要注意一点,需要指定Source参数

DISM /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:d:\sources\sxs

也就是说需要你提供Windows Server 2012的安装文件,否则没法安装。

安装完成之后就可以把ISO换成SQL Server的安装文件了,我的安装文件是从MSDN上下载的,不知道到Core Edition与其他的安装介质是否有区别,其他的应该也可以(没测试过),貌似这个Core Edition应该是一个子集。 安装的时候需要一些参数

Setup.exe /q /ACTION=Install /FEATURES=SQL /INSTANCENAME=MSSQLSERVER /SQLSVCACCOUNT="" /SQLSVCPASSWORD="" /SQLSYSADMINACCOUNTS="" /AGTSVCACCOUNT="NT AUTHORITY\Network Service" /IACCEPTSQLSERVERLICENSETERMS

那个SQLSYSADMINACCOUNTS是必须的,其他的启动帐号都可以可选,如果需要SQL验证,需要添加一个SecurityMode和PWD参数,具体的参数可以参考 http://msdn.microsoft.com/en-us/library/ms144259.aspx 如果只安装DB Engine,整个过程应该在15分钟左右。

在Windows server 2019 Core 版本上安装SQL2016

安装系统后,通过网络等方式先把安装ISO的文件copy过来,虚拟机则用挂一个虚拟光驱即可,然后cd进入目录,执行以下命名即可安装核心服务了:

Setup.exe /qs /ACTION=Install /FEATURES=SQLEngine,Replication /INSTANCENAME=MSSQLSERVER /SQLSVCACCOUNT="计算机名\登陆用户名" /SQLSVCPASSWORD="windows的登陆密码" /SQLSYSADMINACCOUNTS="计算机名\登陆用户名" /AGTSVCACCOUNT="NT AUTHORITY\Network Service" /TCPENABLED=1 /IACCEPTSQLSERVERLICENSETERMS /SECURITYMODE=SQL /SAPWD=sa的密码
安装完成后,后端口打开,以便管理工具连接:

netsh firewall set portopening protocol = TCP port = 1433 name = SQLPort mode = ENABLE scope = SUBNET profile = CURRENT

netsh advfirewall firewall add rule name = SQLPort dir = in protocol = tcp action = allow localport = 1433 remoteip = localsubnet profile = DOMAIN

使用sql命令行工具sqlcmd.exe进行创建数据库与执行sql查询

1、找到sqlcmd.exe路径
c:\> dir sqlcmd.exe /s
结果显示如下:
C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn 的目录

2、将上面路径添加到path中
c:\> path=%path%;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn;

3、执行sqlcmd.exe进入sql命令行
c:\> sqlcmd.exe
1>

4、创建数据库test
1> create database test;
2> go
5、更改当前数据库为test
1> use test;
2> go
6、创建一个表:users
1> create table users( id int, username varchar(32), password varchar(32));
2> go
7、查询表:
1> select * from users;
2> go