sqlserver内存释放心得

SQL Server 2008 或者R2的默认内存分配是2147483647MB, 差不多算是无穷大,对于系统内存的管理策略是有多少占多少。SQLserver会把所有处理过的SQL操作缓存在内存里,这样就不用总去读硬盘了。但是如果长时间运行SQL Server, 系统内存被用的差不多,再开启其他程序就有可能会报内存不足。这时候就需要释放内存缓存啦。一般我用以下两种办法:

  1. 很简单,打开SQL Server configuration Manager,然后把SQL Server(MSSQLSERVER)重启一下,一般默认的instance 就是MSSQLServer,当然你如果装了其他的instance(实例)就选择相应的,例如MSSQLServer(SQLServLatin1), MSSQLServer(ARABIC)。

这种方法最简单有效,但是只能临时的清除SQLServer缓存所占的内存空间,时间长了SQLServer还会把内存占满。而且很重要的是这种方法不能在SQLserver有连接的情况下使用,那样会让正在使用SQLServer的用户暂时无法连接SQLServer,甚至导致程序处错误。而你作为管理员就……

  1. 第二种方法比较复杂,我也不是SQLServer高手,只是从网上学习得来的一些query:

DBCC FREEPROCCACHE

DBCC FREESESSIONCACHE

DBCC FREESYSTEMCACHE(‘All’)

DBCC DROPCLEANBUFFERS

以上一段一般能释放缓存,(注意引号有的时候因为word文档里打不出英文的引号,最好拷到记事本里编辑一下)但是有的时候不是很管用。因为SQLserver不会因为Cache(缓存)释放了而释放内存,占了茅坑不一定XX。此命令只会让SQLServer不会继续占领新的内存,定期执行一下还可以。关键是还要释放一下内存。

通过以下Query 可以看出当前服务器所占内存情况

SELECT * FROM sys.dm_os_performance_counters

WHERE counter_name IN (‘Target Server Memory (KB)’,’Total Server Memory (KB)’)

Target Server Memory(KB)和 Total Server Memory(KB)字面意思所得就是目标和当前SQL Server所占的内存大小。

EXEC sp_configure ‘show advanced options’, 1

GO

EXEC sp_configure ‘max server memory’, 256

EXEC (‘RECONFIGURE’ )

WAITFOR DELAY ’00:00:05′

EXEC  sp_configure ‘max server memory’, 2147483647

EXEC (‘RECONFIGURE’ )

GO

EXEC sp_configure ‘show advanced options’, 0

GO

其实我用这几句也不是很奏效,时间一长还是可能会有内存不够的情况。

******

总的来说我的管理办法是:

  1. 装好了SQLServer之后立刻设置最大使用内存

EXEC sp_configure ‘show advanced options’, 1 — 这句是打开advanced options

GO

EXEC sp_configure ‘max server memory’, 9216 — 设置最大内存为9G,我们server 内存是16G的,留下7G足够了

EXEC (‘RECONFIGURE’ )

GO

EXEC sp_configure ‘show advanced options’, 0 –记得用完了把advanced options关掉

GO

  1. 过一段时间觉得不行了就执行一下

DBCC FREEPROCCACHE

DBCC FREESESSIONCACHE

DBCC FREESYSTEMCACHE(‘All’)

DBCC DROPCLEANBUFFERS

这个清缓存也很头疼,不知道什么时候合适,就这样吧,管他呢,我又不是专家,出了问题大不了来机器不行。或者写个Procedure,用job定期执行。

没办法,SQLServer太霸道了,以上方法不是万全之策,建议还是把SQLServer放到一边单独用吧。

sqlserver 删除表数据并释放磁盘空间

delete  from TheTable with(TABLOCK) where answerTime between @DataTime3 and @DataTime4

——-释放磁盘空间————
declare @table nvarchar(50),@fileid int
set @table = ‘MyDB’
set @fileid = 1

dump transaction @table with no_log
backup log @table with no_log
dbcc shrinkfile(@fileid)

set @fileid = 2
dump transaction @table with no_log
backup log @table with no_log
dbcc shrinkfile(@fileid)
GO

更新重复产品的ID为同一个

  • 标记单品和多品
--标记有重复prod_name的pid为多个
UPDATE A
SET A.if_muti = '多个'
FROM PROD_DIM_NEW A
JOIN (SELECT pid,PID_NEW FROM dbo.PROD_DIM_NEW WHERE PID_NEW IN ( SELECT PID_NEW FROM [dbo].[PROD_DIM_NEW] GROUP BY PID_NEW HAVING COUNT (1) >= 2 )) c ON a.PID = c.PID
--标记不重复pid为单个
UPDATE prod_dim_new SET IF_MUTI='单个' WHERE IF_MUTI IS NULL;
  • 更新重复产品的pid为同一个
//先生成临时表
SELECT *,row_number() OVER (partition by MANUAL_NUM ORDER BY pid) AS row_id 
INTO arko_dw_keede.dbo.temp_prod_dim_new
FROM [dbo].[PROD_DIM_NEW] WHERE IF_MUTI='多个';
//更新重复产品的pid为同一个
UPDATE a
SET a.pid_NEW=b.pid
FROM arko_dw_keede.dbo.prod_dim_new a JOIN arko_dw_keede.dbo.temp_prod_dim_new b ON b.row_id=1 AND a.manual_num=b.manual_num
WHERE a.if_muti='多个';

 

 

 

推荐系统表结构设计

如何从表1转换成表2

useritemscore
用户1歌曲19
用户1歌曲28
用户2歌曲18
用户2歌曲33
item1item2timesrating
歌曲1歌曲220.9
歌曲1歌曲320.6

Linux命令-rar&unrar

安装rar&unrar的另外一个方法:

#wget ftp://195.220.108.108/linux/atrpms/el7-x86_64/atrpms/stable/unrar-4.2.4-1.el7.x86_64.rpm

#rpm -ivh unrar-4.2.4-1.el7.x86_64.rpm

tar.gz包安装方式参照文章:Linux命令-rar&unrar

Linux问题-缺少libstdc库

当在CentOS 下执行某些命令时,有缺少共享库的报错:

error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

解决办法:
1、执行命令: yum whatprovides libstdc++.so.6

然后会提示哪个安装包有这个库文件如下: 阅读剩余部分 –

近期文章

分类目录

近期评论

文章归档

功能