h*****l 发帖数: 184 | 1 【 以下文字转载自 Software 讨论区,原文如下 】
发信人: hanibal (ganggang), 信区: Software
标 题: Re: SQL下如何转移tempdb
发信站: The unknown SPACE (Tue May 2 17:31:56 2000) WWW-POST
In SQL Server 7, tempdb is the only database that you can
move using the
ALTER DATABASE command:
ALTER DATABASE tempdb
MODIFY FILE (
Name = 'tempdev', Filename = 'newpath/tempdb.mdf)
ALTER DATABASE tempdb
MODIFY FILE (
Name = 'templog', Filename = 'newpath/templog.ldf)
The changes will not take effect until the SQL Server is
restarted. |
|
B*********L 发帖数: 700 | 2 解决了。
1. Move tempdb files to new location(ramdisk).
USE master;
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev, FILENAME = '{new location}\tempdb.mdf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = templog, FILENAME = '{new location}\templog.ldf');
GO
2. after reboot machine, new tempdb files are re-created to the ramdisk. |
|
h*****l 发帖数: 184 | 3 In SQL Server 7, tempdb is the only database that you can
move using the
ALTER DATABASE command:
ALTER DATABASE tempdb
MODIFY FILE (
Name = 'tempdev', Filename = 'newpath/tempdb.mdf)
ALTER DATABASE tempdb
MODIFY FILE (
Name = 'templog', Filename = 'newpath/templog.ldf)
The changes will not take effect until the SQL Server is
restarted. |
|
B*********L 发帖数: 700 | 4 1. 我用的是Ramdisk plus,可以从BIOS看到剩余的内存,并生成一个的虚拟硬盘,这
个好像不受操作系统的限制。
2. xp+/pae, 可以让xp提升到36位,所以我的xp可以认超过3G.但是由于xp的某些限
制,最多只到3.5G(有人说是4G).
3.I moved tempdb to the ramdisk and then shut down the server. after restart
my PC, sql server create a new tempdb in ramdisk automatically. No error, no
warning. |
|
j*****n 发帖数: 1781 | 5 use ESTIMATEONLY to see how big the size of tempdb is needed.
consider increasing space of the tempdb when possible;
otherwise consider separate checks instead of whole. such as NOINDEX,
PHYSICAL_ONLY, DATA_PURITY. conduct BOL for more information. |
|
B*********L 发帖数: 700 | 6 我的机器有8G内存,但winxp最多认3.5G。所以俺建了一个4.5G的 Ramdisk,把剩下的
内存利用起来。其中pagefile占了3.5G,还有1G想着分给TEMPDB,但是不知道怎么去做。
我用的是mssql2005。ramdisk虽然快,但是每次关机上面的所有东西就会消失。
这里那位同学曾经做过的,是否能够指点俺一下。谢谢了。 |
|
B*********L 发帖数: 700 | 7 I run this command:
DBCC CHECKDB WITH NO_INFOMSGS
It cause tempdb full.
Is there a way to prevent that?
Thanks. |
|
z***y 发帖数: 7151 | 8 dbcc checkdb use hell of space on tempdb. Don't know if there's way you can
change this. |
|
B*********L 发帖数: 700 | 9
我是把tempdb放在了ramdisk上,这样速度快很多。可是我的ramdisk只有4.5GB,所以
很麻烦。
分开来check大概是条路,但是我没做过,不知道在次序上有没有要求。您能帮着写一
个吗?自己写功力不够。
谢谢。 |
|
n*****y 发帖数: 36 | 10 你的SQL Server 版本是2000,2005还是2008?
另外,如果你的服务器是production server,
似乎tempdb所在的disk容量太小了,为什么不换到
容量大一些的专用硬盘上?
你还可以试试下面两个办法
1. 使用 TABLOCK(代价是low concurency)
2. 使用user-defined snapshots
先为database创建一个snapshot(SQL2005 or 2008),
该snapshot应该建在一个有足够空间的硬盘上,至少
有和该database一样大的空间,然后run dbcc command
on this snapshot
请zenny 和jackrun 大佬指正 |
|
w****b 发帖数: 118 | 11 1.Check if your tempdb lun is srdf. If yes, You do not need srdf for tempdb
lun.
if this is not cluster server, You might consider put tempdb in local.
2.Check the raid type, raid10 is better. Storage guy will argue raid 50 and
raid 10 are the same.
3.You might want to enable T1118 flag if you see a lot of waitresource on
PFS or sgam page.
4.Add more spindles to the tempdb lun to improve the i/o performance. |
|
W*******r 发帖数: 15 | 12 tempdb..temptalble resides in tempdb. #temptable resides in the same db. |
|
a9 发帖数: 21638 | 13 if exists (select * from tempdb.dbo.sysobjects where id = object_id(N'tempdb
..#test') and type='U')
drop table #test
select 1 as col1 into #test |
|
R*********r 发帖数: 225 | 14 yeah,这个是工作的。多谢。
不过如果我想让#test的结构在不同的条件下完全不一样就不行了,不好事先定义。
下面两个例子,第一个报错,说#Test 已经存在,但是如果我把它换成一个permanent
table就完全没问题。
BTW: 用的是SQL SERVER 2008 R2
IF (2>1)
BEGIN
IF OBJECT_ID(N'tempdb.dbo.#Test','U') IS NOT NULL DROP TABLE #Test
SELECT 1 AS col1 into #Test
END
ELSE
BEGIN
IF OBJECT_ID(N'tempdb.dbo.#Test','U') IS NOT NULL DROP TABLE #Test
SELECT 2 as col1 INTO #Test
END
IF (2>1)
BEGIN
IF OBJECT_ID(N'dbo.test','U') IS NOT NULL DROP TABLE dbo.test
SELECT 1 AS col1 into dbo.test
END
ELSE
BEGIN
IF OBJECT_I |
|
g***l 发帖数: 18555 | 15 MAX I/O WAIT ON TEMPDB为什么总是很高呢,SQL 2008, SAN, 30G内存,是有很多
STORED PROCEDUR RUNNING,不过TEMPDB 的I/O总是在30 MS以上,一天平均下来好几百
,微软说5+就算高了。 |
|
i****a 发帖数: 36252 | 16 is your tempdb on the same spindle as data and log files? see if you can
separate them. I know with SAN it's hard to tell/manage but that's one
thing to look at.
another thing to try is multiple tempdb files. |
|
g***l 发帖数: 18555 | 17 TEMPDB和MDF在一个RAID上,LOG在一个RAID上,老板做了16个TEMPDB FILE,一个CPU一
个,我知道不对,应该是1/2或1/4,不过也不能这么高吧,我测了侧,主要是WRITE慢
,READ没有问题。 |
|
g***l 发帖数: 18555 | 18 *是OLTP的SERVER,不过网站用很多的STORED PROCEDURE PULL DATA,因为每一CLICK都
要RUN SP,BUSINESS SERVER CACHE好多,每隔一个小时REFRESH一次
*2 nodes cluster
*去看了一下,没有什么设置可以调,用的是DELL MODULAR DISCK STORAGE MANAGER
显示ARRAY IS OPTIAML
你说的这些都不知道哪里去改,T1118 flag force to use uniformed extent,我觉得
帮助不大,Add more spindles to the tempdb 还是多弄几个FILE吧,我已经有16个
FILE了,MS有的说一定要1 CPU-1TEMP FILE,还有说最多8个的。
tempdb
and |
|
g***l 发帖数: 18555 | 19 我有一个JOB是RENAME一个很大的TABLE,然后用一个空的TABLE,替换出来了好ARCHIVE
,一些BCP之类的东西,因为数据很多,又不能DELETE,TRUNCATE又怕丢失数据,一天1.
4MILLION.所以只能RENAME,RECOMPLILE,之后还做了UPDATE STATISTICS
(当然可以用PARTITION做ARCHIVE,但现在不是2008 COMPATIBLE,不能用TABLE
PARTITION),现在问题是这个JOB RUN完MAX I/O WAIT就上去了,
我测了一下WRITES TO TEMPDB DOUBLE了,大家看是什么问题,现在MAX I/O在三位数,
周一没RUN这个JOB的时候在两位数,TEMPDB现在自己一个RAID 1. |
|
g***l 发帖数: 18555 | 20 汇报一下,TEMPDB移走,单独一个RAID 1,16CORE,8个TEMPDB FILES。一样大小和
AUTO GROWTH,I/O WAIT基本解决了,另外ARCHIVE JOB之后加了DBCC FREE CACHE,估
计明天HIGH IO WAIT的问题可以彻底解决了 |
|
b****k 发帖数: 23 | 21 1. 比如在 LEFT JOIN 中过滤条件写在 ON 和 WHERE 的区别。
2. 函数和存储过程的区别?
3. Table-value function 和 scalar-valued function 的区别.
4. char、varchar、nvarchar之间的区别(包括用途和空间占用
5. 有哪些操作会使用到TempDB;如果TempDB异常变大,可能的原因是什么,该如何处理;
6.Index有哪些类型,它们的区别和实现原理是什么,索引有啥优点和缺点;如何为SQL
语句创建合适的索引,索引创建时有哪些需要注意的项
7. 临时表、表变量、CTE(公用表表达式)有啥区别和联系,保存位置有啥不一样,使用
时如何决定选哪种;
8. 视图和索引视图有什么区别
9. 如何实现分区,分区的步骤,分区有什么好处,怎么实现 Sliding Window.
10.如何比较两个同结构的表数据的差异
11.SQL调优步骤,如何来判断SQL语句存在问题,怎么定位问题,如何解决这些问题;
平时也可以看看 http://www.flybi.net/ 里面有很多这种问题 |
|
c********r 发帖数: 649 | 22 我卖来放在 dev sql server 上做 tempDB用,你们干啥?多少钱买的? |
|
h*****l 发帖数: 184 | 23 【 以下文字转载自 Software 讨论区,原文如下 】
发信人: hanibal (ganggang), 信区: Software
标 题: SQL下如何转移tempbd
发信站: The unknown SPACE (Tue Apr 25 14:19:42 2000)
WWW-POST
比如它现在的位置是C盘,
如何让它转移到D盘?
谢谢。 |
|
z***y 发帖数: 7151 | 24 union all 会导致merge scan, 不必要的使用tempdb tablespace.
1 might be better.
ITEM,
all |
|
n********6 发帖数: 1511 | 25 我都用过,用于stored procedure,然后作为scheduled job。都是按照以下步骤:
IF OBJECT_ID ('tempdb..##table')>0 -- 如果#就不需要。
DROP TABLE ##table -- 如果#就不需要。
step1: load data to # or ##,
step2: clean/process,
step3: load to final table/destination.
step4: drop ##table -- 如果#就不需要。
但是我不知道两种用法有何利弊。在实际应用中哪些情况下推荐用#,哪些情况下推荐
用##。 |
|
z***y 发帖数: 7151 | 26 Round 3!
这是一道SQL Server failover clustering 安装问题:again, open question:
1. Now we are planning to install 64 bit sql server on a two node A/P
clustering environment with SANS. The OS is windows server 2003 on IA-64 .
The db is OLTP db and has the initial size of 650GB. The storage engineer
will create the LUN, what are the requirements you might give to him (RAID
type/Alignment,etc)?
2.The server has totally 16 CPU cores, in order to optimize the performance,
how many tempdb data files you woul |
|
z***y 发帖数: 7151 | 27 谈谈看法:
1. RAID
应该尽量避免RAID5。这是因为它每一次写都要有三次disk i/o ,不适
合OLTP,应该尽可能地选择RAID1,RAID10. 退一步说, 即使用R
AID5,tempdb 绝对不能放在上面。
2. Alignment
为什么要align, 因为MBR占磁道的头62块,数据从63块起,但是磁盘每次读都是以64
块为单位, 这样一来, 比如我要读1块,那一次i/o就可以, 但是如果我要读2块,就
要disk i/o两次,所以我们要求设定数据从64块起,或者64的倍数起。
经常用到的工具是diskpar
diskpar alignment=1024
3. NTFS 格式化
对于sql server, 默认的格式化block 是 4k, sql server engine 每次读8个页,共
64k, 所以NTFS应该格式化为64k block
4. disk layout
至少, tempdb 要单独在一个LUN 上。
log 要和data 在不同的LUN上。
第二题:
一般说来, 数据文件的个数, 是所有CPU core 数量的.25 ~1.0. 而te |
|
c*****d 发帖数: 6045 | 28 我的一些看法,
第1题.
tempdb可以放在RAID 0上
log放在RAID 0+1
data最好放在RAID 0+1上
RAID
performance,
I
2005 |
|
n********6 发帖数: 1511 | 29 Would you explain a little bit how to use temp table and not use cursor in
this case?
Can you provide any comments if I do in this way? (MSSQL)
IF OBJECT_ID('TEMPDB..TEMPTABLE') > 0
DROP ##TEMPTABLE
CREATE ##TEMPTABLE
CREATE INDEX ... (IF NECESSARY, NONCLUSTERED PREFERRED IN GENERAL)
DECLARE CURSOR
OPEN CURSOR
FETCH CURSOR INTO @COLUMN_1, @COLUMN_2, @COLUMN_3
WHILE (@@FETCH_STATUS = 0)
SELECT FUNC(COLUMN_1, COLUMN_2), COLUMN_3
INTO (COLUMN_A, COLUMN_B)
FROM ORIGINAL_TABLE
FETCH NEXT FROM CURSOR |
|
n********6 发帖数: 1511 | 30 Question1: What are the two ways to create the temptable? Which is the best
practice?
My answer:
Option1:
CREATE TABLE ##TEMPTABLE
...
INSERT INTO ##TEMPTABLE
SELECT ...
FROM ...
Option2:
SELECT ...
INTO ##TEMPTABLE
FROM ...
WHERE ...
I do not know which is the best practice. I think both can check the ##
temptable in tempdb first for validation, and both can create index after
data insert. |
|
p*****s 发帖数: 1780 | 31 我想把一些变量追加到文本文件,但不知道怎么写,特来请教。
DECLARE @name VARCHAR(50)
DECLARE db_cursor CURSOR FOR
SELECT name
FROM [master].[sys].[databases]
WHERE name NOT IN ('tempdb')
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
-- 这里就想把变量@name的值输出到 c:\1.txt
-- 类似于dos命令 echo @name >> c:\1.txt
-- 请问sql命令该怎么写?
-- 谢谢
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor |
|
i****a 发帖数: 36252 | 32 Never done this before. But what about moving tmp db into ramdisk after
start. And move it back to harddisk before you shut down comp |
|
i****a 发帖数: 36252 | 33 And are you sure you can ramdisk the 4.5 gb ram when your have 32 bit OS
that only sees 3 gb?
做。 |
|
|
|
R*********r 发帖数: 225 | 36 IF (2>1)
SELECT 1 as col1 INTO #test
ELSE
BEGIN
IF OBJECT_ID(N'tempdb.dbo.#test') IS NOT NULL DROP TABLE #test
SELECT 2 as col1 INTO #test
END
上面这个语句报错:
Msg 2714, Level 16, State 1, Line 7
There is already an object named '#test' in the database.
把#test换成permenant table就没问题,请问这个怎么解决? |
|
S*****0 发帖数: 538 | 37 这个没问题,刚试过。 估计,是#test table 需要先定义,不然,SQL Server
paser 会遇到SELECT ...INTO #test 就定义一次#test, 导致错误 。
IF OBJECT_ID(N'tempdb.dbo.#test') IS NOT NULL DROP TABLE #test
CREATE TABLE #test(col1 int)
IF (2>1)
INSERT INTO #test(col1)
SELECT 1 as col1
ELSE
BEGIN
INSERT INTO #test(col1)
SELECT 2 as col1
END |
|
|
j*****n 发帖数: 1781 | 39 It depends what's your major concern that you want to run this CHECKDB
command. Can you describe in more detail?
For example, if the major concern is about the consistency of disk space
allocation structures, actually you may think only use the DBCC CHECKALLOC
instead.
Again, BOL is the best resource for reference. |
|
|
|
g***l 发帖数: 18555 | 42 我用DMV做了TEMPDB AVG IO STALL TIME,还是很高,平均在200MS以上,有时候一天平
均下来在1000以上,怎么会这么慢,READ IO STALL TIME没有问题,都是WRITE的问题
,RAID是10,也不会慢这么多。MDF的数据文件有时候会有MAX IO HIGH,但平均一天不
会超过50的。 |
|
g***l 发帖数: 18555 | 43 我们这管STOREAGE就是看看SETTING OPTIMAL就不管了,说没问题
IO一天高一天低也看不出规律。明显地WRITE要慢很多,TEMPDB DAILY AVG IO WAIT
一直很高,有个别天都上好几千,也没订单进来,1/2号根本就没有几个ORDER
max number of concurrent connections =0
default connction options nothing
cast threshold for parallellism =5
max degre of parallelism=0
server 64 bit 2008 version 10.0.2351
memory min 1G max 30G
use AWE to allocate memory
for
1/
(
test |
|
g***l 发帖数: 18555 | 44 COPY过去,DETTACH ATTACH是比较保险的。如果出问题还可以SWITCH BACK。如果能
LIVE接上新SAN的话,调试好CLUSTER,就是DETACH-COPY-ATTACH的时间,不过要注意你
的MASTER, MSDB ,TEMPDB在什么盘上,如果旧SAN还保留的话就是个PRODUCTION DB,应
该很容易。如果旧SAN要关掉,你的MASTER TEMDB MSDB MODEL都要移走,就很麻烦了。
SAN的CLONE也可以,我觉得风险很高,但愿PROGRAM没装在SAN上,要CLONE的话,要随时
准备不WORK,SWITCH BACK,而且在线CLONE的话,会损失数据,离线CLONE,又有DOWNTIME,
其实不如连SERVER也换了得了,另起炉灶,调试好了,搞个RENAME SERVER得了。而且现在
都是64BIT的操作系统,不如升级全做了,WINDOWS 2008+SQL SERVER 2008,一次到位,
用个BACKUP测试好了全换掉,老系统就当DEV好了。单换个STORAGE,风险高,就是硬盘大点,
新SAN可能IO PERFORMANC... 阅读全帖 |
|
t****n 发帖数: 263 | 45 I guess that's because there is only one tempdb per instance . |
|
s**********o 发帖数: 14359 | 46 是很慢,现在都是SSD DATABASE MIRRORING取代SAN的CLUSTER,或者干脆把TEMPDB放入
内存 |
|
S*****0 发帖数: 538 | 47 需要买一个数据库server, 专用于SSAS,SSRS, 所以打算512GRAM, 2个8核
processors应该差不多了(这2个软件似乎用CPU不多,另外也考虑到SQLServer
Licensing的问题), 600G SSD 给TempDB, 2T RAID10。
这个配置合理不, over还是under? 主要是high performance, 还需要别的什么考虑?
请大侠们赐教。 |
|
i****a 发帖数: 36252 | 48 把tempdb放上面, and other frequent accessed tables in a file group 放上面
这是企业级产品,有错误检查和 raid
两年前的事了, 不知道我有没有记错
不过现在 SSD白菜价, enterprice level SSD 也应该很便宜了吧. 不知道 FusionIO
市场空间还有多大 |
|
z***y 发帖数: 7151 | 49 20张disks, 每一个150GB, all system databases are in RAID 5, only one user
database which is on RAID10
Tempdb is 800GB, 请问, what's the largest size of the user database can
be?
a. 1000GB
b. 900GB
c. 850GB
d. 950GB
谁能第一个写出推理过程和正确答案的, 哥给你100个包子。 条件是不能google。 5
分钟作答
。
=================================================================
答案
RAID 5 800GB 至少是 6 1/3 块。 那就是7块 。
但是 RAID10 只能是双数, RAID 5 就是8块。
所以RAID 10 有12 块, 可用的理论上是900GB, 但是格式化以后不到900GB, 所以答
案是850GB
。
木有答对的, 都洗洗睡吧。
大家愿意做这种题目么? 愿意我还出。 |
|
z***y 发帖数: 7151 | 50 欢迎大家补充。
T-SQL
● Tools for the DBA
● Development
○ SPs
○ Triggers
○ Functions
○ CTEs
○ Temporary objects
Installations and patching
● Standalone
● Cluster
SQL Server Upgrades
● Standalone
● Cluster
Configuration Best Practices
● Database files placement
● Tempdb configuration
● Lock PAGES in memory
● Memory configurations
Performance tuning high level (how to)
● Indexes
● Execution plans
● DMVs
● Performance Counters
● Database design
● Parallelism
● Compilation/
● recompilations
Security
● Login... 阅读全帖 |
|