我有几个关于文件组及其文件 (.ndf) 的问题。
- 有很多文件的文件组比只有一个文件的文件组快吗?(所有文件都位于同一驱动器上,即其数据的访问时间相同)
- 如果(1)为假。具有许多文件分布在驱动器 A 和 B 上的文件组比只有一个文件位于驱动器 A 或 B 上的文件组更快?(假设驱动器 A 和 B 的型号相同)
我有几个关于文件组及其文件 (.ndf) 的问题。
通常,每个文件组有一个文件,每个磁盘集/卷/控制器有一个文件组
每个文件组有多个文件,你有比例填充,这意味着 IO 可能不会像你期望的那样分布。无论是同一个磁盘还是不同磁盘
验证任何意见的唯一方法是使用您自己创建的冷硬统计信息。使用棍子。如果您的计算机上有几个 USB 3 端口,请去购买 4 个 4-GB 的 USB 记忆棒。可以确定它们是相同的。创建一个数据库,其中一个 Stick 上的 LDF 文件和另一个上的 PRIMARY 文件组。然后,再创建两个文件组,每个剩余的棒上一个。然后,将文件添加到每个 FILEGROUP。CubeSpark 建议每个 CORE 添加一个文件,每个 FILEGROUP 最多添加 4 个文件。如果要测试 8 个文件,则添加 8 个。然后,将表添加到 FILEGROUPS,并加载大量数据。创建一些时间。不要忘记调整文件设置(初始大小、增长率)。也许您可以使用此代码。你需要改变你的棍子的路径,因为安装点会不同(驱动器号)。玩得开心。
USE master;
GO
IF DB_ID('CubeSpark') IS NOT NULL
BEGIN
DROP DATABASE [CubeSpark]
END
-- GB to start?
CREATE DATABASE [CubeSpark] CONTAINMENT = NONE
ON PRIMARY
-- Proportional fill. This must NOT be used as the default FILEGROUP. PLEASE DO NOT CHANGE THAT!
-- PRIMARY is USED ONLY FOR SYSTEM METATDATA, NOT USER DATA!!!!
( NAME = N'CubeSpark_SYSTEM_0', FILENAME = N'C:\OLTP_DATA\CubeSpark\CubeSpark_sys_0.mdf' , SIZE = 10MB , MAXSIZE = 40MB, FILEGROWTH = 5MB),
( NAME = N'CubeSpark_SYSTEM_1', FILENAME = N'C:\OLTP_DATA\CubeSpark\CubeSpark_sys_1.mdf' , SIZE = 10MB , MAXSIZE = 40MB, FILEGROWTH = 5MB),
FILEGROUP [FACTS] DEFAULT
-- 60 GB to start.
( NAME = N'CubeSpark_FACTS_0', FILENAME = N'C:\OLTP_DATA\CubeSpark\CubeSpark_FACTS_0.ndf' , SIZE = 1GB , MAXSIZE = UNLIMITED, FILEGROWTH = 100MB),
( NAME = N'CubeSpark_FACTS_1', FILENAME = N'C:\OLTP_DATA\CubeSpark\CubeSpark_FACTS_1.ndf' , SIZE = 1GB , MAXSIZE = UNLIMITED, FILEGROWTH = 100MB),
( NAME = N'CubeSpark_FACTS_2', FILENAME = N'C:\OLTP_DATA\CubeSpark\CubeSpark_FACTS_2.ndf' , SIZE = 1GB , MAXSIZE = UNLIMITED, FILEGROWTH = 100MB),
( NAME = N'CubeSpark_FACTS_3', FILENAME = N'C:\OLTP_DATA\CubeSpark\CubeSpark_FACTS_3.ndf' , SIZE = 1GB , MAXSIZE = UNLIMITED, FILEGROWTH = 100MB),
( NAME = N'CubeSpark_FACTS_4', FILENAME = N'C:\OLTP_DATA\CubeSpark\CubeSpark_FACTS_4.ndf' , SIZE = 1GB , MAXSIZE = UNLIMITED, FILEGROWTH = 100MB),
( NAME = N'CubeSpark_FACTS_5', FILENAME = N'C:\OLTP_DATA\CubeSpark\CubeSpark_FACTS_5.ndf' , SIZE = 1GB , MAXSIZE = UNLIMITED, FILEGROWTH = 100MB),
FILEGROUP [MATERIALIZED]
-- 1 GB to start - which is sized VERY large given materialized views data as of May 25th.
( NAME = N'CubeSpark_MATERIALIZED_0', FILENAME = N'C:\OLTP_DATA\CubeSpark\CubeSpark_MATERIALIZED_0.ndf' , SIZE = 100MB , MAXSIZE = UNLIMITED, FILEGROWTH = 25MB),
( NAME = N'CubeSpark_MATERIALIZED_1', FILENAME = N'C:\OLTP_DATA\CubeSpark\CubeSpark_MATERIALIZED_1.ndf' , SIZE = 100MB , MAXSIZE = UNLIMITED, FILEGROWTH = 25MB),
( NAME = N'CubeSpark_MATERIALIZED_2', FILENAME = N'C:\OLTP_DATA\CubeSpark\CubeSpark_MATERIALIZED_2.ndf' , SIZE = 100MB , MAXSIZE = UNLIMITED, FILEGROWTH = 25MB),
( NAME = N'CubeSpark_MATERIALIZED_3', FILENAME = N'C:\OLTP_DATA\CubeSpark\CubeSpark_MATERIALIZED_3.ndf' , SIZE = 100MB , MAXSIZE = UNLIMITED, FILEGROWTH = 25MB),
FILEGROUP [INDICES] -- non-clustered
-- 12 GB to start.
( NAME = N'CubeSpark_INDICES_0', FILENAME = N'C:\OLTP_DATA\CubeSpark\CubeSpark_INDICES_0.ndf' , SIZE = 1GB , MAXSIZE = UNLIMITED, FILEGROWTH = 100MB),
( NAME = N'CubeSpark_INDICES_1', FILENAME = N'C:\OLTP_DATA\CubeSpark\CubeSpark_INDICES_1.ndf' , SIZE = 1GB , MAXSIZE = UNLIMITED, FILEGROWTH = 100MB),
( NAME = N'CubeSpark_INDICES_2', FILENAME = N'C:\OLTP_DATA\CubeSpark\CubeSpark_INDICES_2.ndf' , SIZE = 1GB , MAXSIZE = UNLIMITED, FILEGROWTH = 100MB),
( NAME = N'CubeSpark_INDICES_3', FILENAME = N'C:\OLTP_DATA\CubeSpark\CubeSpark_INDICES_3.ndf' , SIZE = 1GB , MAXSIZE = UNLIMITED, FILEGROWTH = 100MB),
-- 4 GB to start.
FILEGROUP [SPOKES] -- 40 GB to Start
( NAME = N'CubeSpark_DIMS_0', FILENAME = N'C:\OLTP_DATA\CubeSpark\CubeSpark_DIMS_0.ndf' , SIZE = 1GB , MAXSIZE = UNLIMITED, FILEGROWTH = 100MB),
( NAME = N'CubeSpark_DIMS_1', FILENAME = N'C:\OLTP_DATA\CubeSpark\CubeSpark_DIMS_1.ndf' , SIZE = 1GB , MAXSIZE = UNLIMITED, FILEGROWTH = 100MB),
( NAME = N'CubeSpark_DIMS_2', FILENAME = N'C:\OLTP_DATA\CubeSpark\CubeSpark_DIMS_2.ndf' , SIZE = 1GB , MAXSIZE = UNLIMITED, FILEGROWTH = 100MB),
( NAME = N'CubeSpark_DIMS_3', FILENAME = N'C:\OLTP_DATA\CubeSpark\CubeSpark_DIMS_3.ndf' , SIZE = 1GB , MAXSIZE = UNLIMITED, FILEGROWTH = 100MB)
LOG ON -- 8 GB to start. Log files fill sequentially, not in parallel
( NAME = N'CubeSpark_log_0', FILENAME = N'C:\OLTP_TLOG\CubeSpark\CubeSpark_log_0.ldf' , SIZE = 2GB , MAXSIZE = UNLIMITED, FILEGROWTH = 100MB ),
( NAME = N'CubeSpark_log_1', FILENAME = N'C:\OLTP_TLOG\CubeSpark\CubeSpark_log_1.ldf' , SIZE = 2GB , MAXSIZE = UNLIMITED, FILEGROWTH = 100MB ),
( NAME = N'CubeSpark_log_2', FILENAME = N'C:\OLTP_TLOG\CubeSpark\CubeSpark_log_2.ldf' , SIZE = 2GB , MAXSIZE = UNLIMITED, FILEGROWTH = 100MB ),
( NAME = N'CubeSpark_log_3', FILENAME = N'C:\OLTP_TLOG\CubeSpark\CubeSpark_log_3.ldf' , SIZE = 2GB , MAXSIZE = UNLIMITED, FILEGROWTH = 100MB )
GO
ALTER DATABASE [CubeSpark] SET RECOVERY SIMPLE
ALTER DATABASE [CubeSpark] SET COMPATIBILITY_LEVEL = 110
ALTER DATABASE [CubeSpark] SET ANSI_NULL_DEFAULT ON
ALTER DATABASE [CubeSpark] SET ANSI_NULLS ON
ALTER DATABASE [CubeSpark] SET ANSI_PADDING ON
ALTER DATABASE [CubeSpark] SET ANSI_WARNINGS OFF
ALTER DATABASE [CubeSpark] SET ARITHABORT ON
ALTER DATABASE [CubeSpark] SET NUMERIC_ROUNDABORT OFF
ALTER DATABASE [CubeSpark] SET CONCAT_NULL_YIELDS_NULL ON
ALTER DATABASE [CubeSpark] SET QUOTED_IDENTIFIER ON
ALTER DATABASE [CubeSpark] SET DATE_CORRELATION_OPTIMIZATION ON
ALTER DATABASE [CubeSpark] SET AUTO_CLOSE OFF
ALTER DATABASE [CubeSpark] SET AUTO_CREATE_STATISTICS ON
ALTER DATABASE [CubeSpark] SET AUTO_UPDATE_STATISTICS ON
ALTER DATABASE [CubeSpark] SET AUTO_SHRINK OFF
ALTER DATABASE [CubeSpark] SET CURSOR_CLOSE_ON_COMMIT OFF
ALTER DATABASE [CubeSpark] SET CURSOR_DEFAULT GLOBAL
ALTER DATABASE [CubeSpark] SET RECURSIVE_TRIGGERS OFF
ALTER DATABASE [CubeSpark] SET DISABLE_BROKER
ALTER DATABASE [CubeSpark] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
ALTER DATABASE [CubeSpark] SET TRUSTWORTHY OFF
ALTER DATABASE [CubeSpark] SET ALLOW_SNAPSHOT_ISOLATION OFF
ALTER DATABASE [CubeSpark] SET PARAMETERIZATION SIMPLE
ALTER DATABASE [CubeSpark] SET READ_COMMITTED_SNAPSHOT OFF
ALTER DATABASE [CubeSpark] SET HONOR_BROKER_PRIORITY OFF
ALTER DATABASE [CubeSpark] SET PAGE_VERIFY CHECKSUM
ALTER DATABASE [CubeSpark] SET DB_CHAINING OFF
ALTER DATABASE [CubeSpark] SET FILESTREAM( NON_TRANSACTED_ACCESS = OFF )
ALTER DATABASE [CubeSpark] SET TARGET_RECOVERY_TIME = 0 SECONDS
ALTER DATABASE [CubeSpark] SET MULTI_USER
ALTER DATABASE [CubeSpark] SET READ_WRITE
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
BEGIN
EXEC [CubeSpark].[dbo].[sp_fulltext_database] @action = 'enable'
END
GO