【1】概念

  把不同数据文件移动到不同的物理磁盘,无疑是一个提高IO的有效办法

  在资源可以的情况下,尽量把 temp 、数据库的主数据文件(mdf)、数据库的从数据数据(ndf)、数据库的事务日志文件(ldf)存放在不同磁盘

  如果碍于资源有限,尽可能的把数据文件存放在不同磁盘(即mdf与ndf不同盘,或者说是同文件组中的不同文件不同盘),没有ndf的情况下mdf与ldf不同盘

【2】如何只管查看物理磁盘与逻辑盘符的关系?

右击我的电脑-》管理-》磁盘管理,如下图,很明显C/E是同一个物理盘,而D盘是另外一个物理盘。

  

简单案例演示:当目前只有MDF与LDF,且在同一个逻辑盘符时

--0、目的:把数据库文件分部在不同物理磁盘
--1、前提:知道除系统盘外其他逻辑盘符均为不同物理硬盘
--2、问题:(1)权限 (2)没有通用化 -- 允许配置高级选项
EXEC sp_configure 'show advanced options',1;
EXEC sp_configure 'xp_cmdshell',1;
RECONFIGURE WITH OVERRIDE; use master
go
--查看逻辑盘符数量
DECLARE @temp_disk_unused TABLE (
diskNum varchar(2),
unUsed_space bigint
)
insert into @temp_disk_unused
exec xp_fixeddrives --如果逻辑盘符数量》3(表明至少有2个物理盘,我这里只用D,E),且数据库的(单数据文件)数据文件与日志文件均在同一个磁盘下
if exists( select 1 from @temp_disk_unused having count(*)>=3)
and
exists(
select 1 where
(select left(filename,1) from db_tank_1..sysfiles where fileid=1)=
(select left(filename,1) from db_tank_1..sysfiles where fileid=2)
)
begin declare @db_name varchar(100),@logic_name varchar(100)
declare @new_path varchar(500),@filename varchar(100),@old_path varchar(500),@new_dir varchar(100)
declare @old_disk_num varchar(2),@new_disk_num varchar(2)
declare @sql varchar(4000),@sql1 varchar(4000)
--判断当前是在D盘还是E盘,如果是D则把日志文件迁移到E,E迁移到D
select @old_disk_num=left(filename,1) from db_tank_1..sysfiles where fileid=1
if @old_disk_num='D'
set @new_disk_num='E'
else
set @new_disk_num='D' --找出旧文件全路径与新位置路径,方便迁移文件过去
select @old_path=filename,@logic_name=name from db_tank_1..sysfiles where fileid=2
set @filename=right(@old_path,charindex('\',reverse(@old_path))-1)
set @new_dir=stuff(left(@old_path,len(@old_path)-len(@filename)),1,1,@new_disk_num)
set @new_path=stuff(@old_path,1,1,@new_disk_num)
print @filename+','+@new_dir+','+@new_path+','+@logic_name
--------------------------------------------------------
--建立一个虚拟表 用来判断文件夹是否存在
DECLARE @TEMP TABLE(A INT,B INT,C INT)
insert into @TEMP
EXEC [MASTER]..XP_FILEEXIST @new_dir
IF NOT EXISTS(SELECT 1 FROM @TEMP WHERE B=1)
BEGIN
--不存在则创建
SET @SQL='EXEC XP_CMDSHELL ''MKDIR '+@new_dir+''''
exec(@sql)
print @sql
END
--------------------------------------------------------
--修改日志文件(1)修改逻辑文件名对应的物理路径 (2)脱机该数据库 (3)迁移 (4)重新联机该数据库
set @sql1='alter database db_tank_1 modify file (name = '+@logic_name+',filename='''+@new_path+''');'
set @sql1=@sql1+'ALTER DATABASE db_tank_1 SET OFFLINE WITH ROLLBACK IMMEDIATE;'
print @sql1
exec(@sql1)
SET @SQL='EXEC XP_CMDSHELL ''move '+@old_path+' '+@new_path+''''
print @sql
exec(@sql)
set @sql1='alter database db_tank_1 set online;'
print @sql1
exec(@sql1) end
--核验
select * from db_tank_1..sysfiles
if exists(
select 1 where
(select left(filename,1) from db_tank_1..sysfiles where fileid=1)=
(select left(filename,1) from db_tank_1..sysfiles where fileid=2)
)
print 'have problem,please check the info by sysfiles..'
else
print 'operator success!' --------------------------------------------------------
-- 允许配置高级选项 EXEC sp_configure 'xp_cmdshell',0;
EXEC sp_configure 'show advanced options',1; RECONFIGURE WITH OVERRIDE;

【基本优化实践】【1.1】IO优化——把文件迁移到不同物理磁盘的更多相关文章

  1. 数据库优化实践【MS SQL优化开篇】

    数据库定义: 数据库是依照某种数据模型组织起来并存在二级存储器中的数据集合,此集合具有尽可能不重复,以最优方式为特定组织提供多种应用服务,其数据结构独立于应用程序,对数据的CRUD操作进行统一管理和控 ...

  2. [置顶] 数据库优化实践【MS SQL优化开篇】

    数据库定义: 数据库是依照某种数据模型组织起来并存在二级存储器中的数据集合,此集合具有尽可能不重复,以最优方式为特定组织提供多种应用服务,其数据结构独立于应用程序,对数据的CRUD操作进行统一管理和控 ...

  3. Tomcat8史上最全优化实践

    Tomcat8史上最全优化实践 1.Tomcat8优化 1.1.Tomcat配置优化 1.1.1.部署安装tomcat8 1.1.2 禁用AJP连接 1.1.3.执行器(线程池) 1.1.4 3种运行 ...

  4. Hadoop YARN:调度性能优化实践(转)

    https://tech.meituan.com/2019/08/01/hadoop-yarn-scheduling-performance-optimization-practice.html 文章 ...

  5. MYSQL join 优化 --JOIN优化实践之快速匹配

    MySQL的JOIN(四):JOIN优化实践之快速匹配 优化原则:小表驱动大表,被驱动表建立索引有效,驱动表建立索引基本无效果.A left join B :A是驱动表,B是被驱动表:A right ...

  6. CDN HTTPS安全加速基本概念、解决方案及优化实践

    大家都知道,HTTP 本身是明文传输的,没有经过任何安全处理,网站HTTPS解决方案通过在HTTP协议之上引入证书服务,完美解决网站的安全问题.本文将为大家介绍阿里云CDN HTTPS安全加速传输的基 ...

  7. Glow Android 优化实践

    了解 Glow 的朋友应该知道,我们主营四款 App,分别是Eve.Glow.Nuture和Baby.作为创业公司,我们的四款 App 都处于高速开发中,平均每个 Android App 由两人负责开 ...

  8. Unity3D游戏GC优化总结---protobuf-net无GC版本优化实践

    protobuf-net优化效果图 protobuf-net是Unity3D游戏开发中被广泛使用的Google Protocol Buffer库的c#版本,之所以c#版本被广泛使用,是因为c++版本的 ...

  9. 长连接锁服务优化实践 C10K问题 nodejs的内部构造 limits.conf文件修改 sysctl.conf文件修改

    小结: 1. 当文件句柄数目超过 10 之后,epoll 性能将优于 select 和 poll:当文件句柄数目达到 10K 的时候,epoll 已经超过 select 和 poll 两个数量级. 2 ...

随机推荐

  1. jquery fadeOut()方法 语法

    jquery fadeOut()方法 语法 作用:fadeOut() 方法使用淡出效果来隐藏被选元素,假如该元素是隐藏的.大理石平台精度等级 语法:$(selector).fadeOut(speed, ...

  2. Android_activity实现一个简单的新建联系表

    项目展示: 第一个Activity用于显示联系人信息 第二个Activity输入联系人信息 要求: 运行“新建联系人”程序,结果如下图所示: 点击“新建联系人”按钮,打开输入信息界面并输入姓名.公司. ...

  3. Chrome 神器,神奇的技巧

    谷歌开发者工具是前端日常不可缺少的神奇,写布局,找 bug,优化加载速度统统靠他.但是你真的了解他么?这篇文章是专门介绍谷歌浏览器各种好用小技巧的.不是什么长篇大论,旨在提高你的开发效率,早日完工回家 ...

  4. Linux 竞态条件和临界区

    1. 临界区和竞态条件: 临界区:访问和操作共享数据的代码段: 竞态条件:当有多个线程同时进入临界区时,执行结果取决于线程的执行顺序: 如下述代码,当多个线程同时调用func函数,对共享数据sum进行 ...

  5. vxWorks下常用的几种延时方法

         在应用编程的时候,通常会碰到需要一个任务在特定的延时之后执行一个指定的动作,如等待外设以确保数据可靠,控制扬声器发声时间以及串口通信超时重发等.这就需要利用定时器机制来计量特定长度的时间段. ...

  6. SQLSTATE[HY000] [2002] Connection refused

    //域名绑定到模块 '__domain__' => [ 'admin' => 'admin', 'post' => 'api', 'user' => 'index', 'www ...

  7. Excel中,如何将人名按姓和名分开?

    在Excel中,怎么将姓名分开呢? 用到三个函数: left函数:从文本字符串的左端开始,返回指定个数的字符: right函数:从字符串右端开始,返回指定个数的字符: len函数:返回文本串的字符数 ...

  8. OpenCV学习笔记(13)——轮廓特征

    查找轮廓的不同特征,例如面积,周长,重心,边界等 1.矩 图像的矩可以帮助我们计算图像的质心,面积等. 函数cv2.momen()会将计算得到的矩以一个字典的形式返回, 我们的测试图像如下: 例程如下 ...

  9. 解决Mysql无法导入存在null数据的问题

    其实很简单,在mysql的控制台输入 SET @@GLOBAL.sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"; 然后重 ...

  10. Android studio 自动导入(全部)包 import (转)

    原文: https://blog.csdn.net/buaaroid/article/details/44979629 1.      Android studio 只有import单个包的快捷键:A ...