Script to generate index rebuild with PAGE compression

For BI data warehouse databases, since the data does not change much and they typically require a lot of space, it makes a lot of sense to compress the indexes to save space.

I came across some BI databases whose indexes were created without compression. We are in the process of migrating those databases to a new server so I took this opportunity to completely rebuild those indexes with PAGE compression.

Two things are of interest:

  • Index rebuild starts from the smallest to the largest. The rational is that during one index rebuild, it needs roughly twice of the actual index size. If we start with the largest index, it may need to expand the file size unnecessarily. On the other hand, if we start with the smallest one, there might be enough space inside to accommodate that rebuild. Once that rebuild is done, more space will be saved, leaving more room for the next rebuild. This way we’ll be able to accommodate index rebuild with no or minimal additional space requirement;
  • Re-indexing is done on a new server, therefore there are no or very few connections to it, so the script defines the MAXDOP parameter, to hopefully make the process faster.
SELECT 
    s.Name AS SchemaName,
    t.NAME AS TableName,
    i.name AS IndexName,
    'ALTER INDEX ' + i.name + ' ON ' + s.name + '.' + t.name + ' REBUILD WITH (SORT_IN_TEMPDB = ON, DATA_COMPRESSION = PAGE, MAXDOP = 20);' AS AlterIndex,
    SUM(a.total_pages) * 8 AS TotalSpaceKB, 
    SUM(a.used_pages) * 8 AS UsedSpaceKB, 
    (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB
FROM 
    sys.tables t
INNER JOIN 
    sys.schemas s ON s.schema_id = t.schema_id
INNER JOIN      
    sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN 
    sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN 
    sys.allocation_units a ON p.partition_id = a.container_id
WHERE 
    t.NAME NOT LIKE 'dt%' 
    AND t.is_ms_shipped = 0
    AND i.OBJECT_ID > 255 
    AND i.index_id > 0
GROUP BY 
    s.Name, t.Name, i.name
ORDER BY 
    UsedSpaceKB

Comments

沼气生产利用研究笔记之资料链接篇

最近读到老家山东省畜牧局在养殖业发展沼气利用的新闻,让我很受鼓舞。我就把最近在网上读到的公开资料在这里汇总一下,希望能有帮助。也提出一些想法和问题,算抛砖引玉。

照片来源:
美国加州大学戴维斯分校张瑞红教授主持的沼气生产设施
斯德哥尔摩的大沼气公交

Comments

沼气生产利用研究笔记

我记得最初学到沼气是在初三的化学课,课本里讲到一些有机物在缺氧的条件下发酵分解,生成主要成分为甲烷(CH4)的气体。英文称沼气为methane。近几年来biogas这个词开始流行,这倒不是说在我们每个人屁股后装个袋子采集来自大肠的气体,不是那个意思,请大家不要误解。我们可以通过下面这张图表来简要介绍下biogas的生产和使用过程。该图介绍了怎样生产沼气。还有一种在垃圾填埋场(landfill)采集沼气的方法,下文也会提到。

AEE-biogas-plant-functional-overview

上图中心的圆柱拱形建筑是沼气生产的核心部件,叫消化器(digester,或anaerobic digester)。该容器内无光无氧,是利用微生物发酵分解原料的地方。原料厌氧发酵后产生的沼气会飘到拱形的顶部被采集。一般消化器里会有搅拌装置,来促进有机物的厌氧发酵过程。

这是位于德国的Windwärts Energie GmbH的消化器建设中的图片:
GermanyDigesterConstruction

这是同一家biogas能源工厂的消化器顶层照。请注意其中的木材使用。据介绍,屋顶下的木质结构是用来减少沼气中的硫化物。太多硫化物对CHP热电机组不利:
GermanyDigesterTop

消化器的侧面会有原料入口和余料出口。原料(substrate)如上篇博客所说,可以是很多种废料:农作物废料如秸秆,城市绿化废料如废弃枝叶杂草,餐饮和食品加工废料如剩饭菜和上海福喜的过期麦乐鸡或小牛扒,养殖场动物粪便,能源农业生产的农作物,城市污水系统里的污泥(人的粪便)等等。除了污水系统的污泥外,其他原料生产沼气后的残余(digestate)可以做农业肥料。污泥(sludge)的残余内可能含有重金属,不适合做肥料,可以用在建材方面。所以这两种厌氧消化器要分开,以便于其残余的分开利用。通过这些处理,我们就变废为宝,并减轻最终排放对环境的压力。

厌氧消化一般在38摄氏度左右效果最好,所以最好给它加热。热能可以来自消化器自生的沼气,下文会提到。

沼气被采集后一般有两个去处:

  • 工厂本身的CHP(Combined Heat and Power station)热电机。该机器燃烧沼气,可以同时提供热能和电能。这些能量可以在该沼气生产厂就地使用:比如热能可以给消化器加热,电能可以反哺给地区电网。有的沼气生产设施就建立在养殖场上,那么热能就可以给牲畜供暖,还可以利用这些热能搞温室蔬菜种植。
    下图是德国Duingen Hauptschule Biogas的热电机,CHP:
    GermanyCHP
  • 沼气升级(upgrade)。来自消化器的沼气的甲烷含量比重会有不同。它还会含有二氧化碳、氢气、少许水份等等。升级(upgrade)的意思就是分离其它成分而提高甲烷(CH4)的比重。当甲烷比率达标后,可以作为天然气使用,直接注入已有的天然气输送管道。也可以加压而生成加压天然气(CNG,Compressed Natural Gas)或液化,给交通工具提供能源。
    下图是瑞典Lund市的biogas升级设施。该厂用于对从城市污泥(内含人的大小便,sludge)处理后的沼气升级:
    SwedenLundUpgradeFacility

欧盟几年前搞了个biogasmax的试点推广项目,其主要利用方式是交通运输。以下是该项目的视频简介。当然沼气经升级变为天然气后的用处非常多,可以用来取暖、做饭、制冷、发电、化工等,不仅仅是做交通运输的燃料。

另外一种获取沼气的方式是利用已有的垃圾填埋场(landfill)。填埋场内的垃圾会自然发生厌氧发酵过程,沼气生产后会向上冒,如不处理,会产生异味,对填埋场结构造成破坏甚至爆炸。另外一个恶劣后果是沼气是比二氧化碳更糟糕的温室气体。所以从已有的垃圾填埋场采集沼气也是很值得去做的事情。

下图是加拿大一家利用垃圾填埋场采集沼气的设施,用来发电:
CanadaLandfillBiogas

图片来源:
德国的Windwärts Energie GmbH的消化器建设中的图片
同一家biogas能源工厂的消化器顶层照
德国Duingen Hauptschule Biogas的热电机
瑞典Lund市的biogas升级设施
加拿大一家利用垃圾填埋场采集沼气的设施

Comments

沼气生产在农业、养殖业、畜牧业升级和城镇化中的作用

2013年耶诞节和2014年新年期间,我们到瑞典探亲。在这之前我好几年没去瑞典了。这次回去我注意到韦斯特罗斯(Västerås)市的公交车是用沼气(biogas/methane/CH4/甲烷)做燃料,而不是通常的汽油或柴油。这种公车的环境污染要比汽柴油低很多,对降低PM2.5会有不少的帮助。岳父告诉我,公车用的沼气,不少一部分来自厨房的废料、剩饭菜、和城市污水处理系统内的人的大小便!

下图是斯德哥尔摩的大沼气公交。目前沼气公交的燃料缩写是CNG,Compressed Natural Gas,不是液化的。液化的压缩率更高。我在网上注意到瑞典的乌普萨拉(Uppsala)有试用液化沼气做公交燃料的项目,不知进展如何。
StockholmBus
这张是瑞典Örebro市沼气公交顶部的燃料箱,更清晰。
OrebroBus

几年前我曾读到我山东老家农村利用农业和生活垃圾生产沼气的试点,但好像最终并不太成功,也没推广。这种单户沼气池效果不太理想,但在乡镇、城市建立大中型生物质沼气生产厂来集中供暖、发电、供气,发挥规模效应,应当更有意义,互利多赢:

  • 随着农业机械化和现代化,农作物如秸秆等原料正逐渐丧失以往的肥料和燃料功能,需要处理而不是焚烧,变废为宝。用这些原料造纸是好办法,但用它来生成沼气也很不错;
  • 中国正进行史无前例的大规模城镇化。城镇化质量的一个重要指标是城镇生活垃圾和污水处理。居民的生活垃圾,经过分类整理,可以用来循环和发电;而城镇中的来自居民区和商业区的生活污水里含有人的大小便等有机物(sludge/substrate)污泥。如能和污水处理厂协调结合,利用这些污泥生产沼气,就可以获得能源并减少最终排放物对环境的压力;

    下图是日本横滨污泥沼气生产处理设施。这些污泥来自城市污水系统。
    JapanSludge

  • 城镇化和生活水平提高的另一个后果是人们对肉类蛋白质的需求也越来越多。当然要通过教育宣传等各种方式鼓励人们通过多种方式摄取蛋白质,但城镇化的一个效应确实是大规模的鸡、鸭、猪、羊、牛等养殖业的发展。这当然也会给生活环境带来压力,特别是这些家禽、牲畜的粪便需要处理。这些废料,和上面提到的农业废料如秸秆一样,应当拿来生产沼气。沼气生产后的残余是很好的肥料,能减少目前农村普遍的化肥滥用现象和对工业化肥的依赖。科学处理动物的粪便,也能改善牲畜的生长环境,更加人道,也会提高肉质和利润。

    请注意,城镇污水污泥沼气化后的残余并不适合做农业废料,因为城镇污水管道废物成分复杂,含重金属。瑞典有用这些残余做建筑材料、垃圾场覆盖材料的经验,值得借鉴。

    城镇化同时也会带来餐饮业和食品加工业的发展。这些行业里的垃圾也和人畜的粪便一样,蕴含着大量的能量,当然也应当用来做沼气生产!像今天看到的上海福喜公司用过期肉类做成的麦当劳、肯德基食品,当然不能让人吃,但把这些做原料生产沼气和肥料挺好的。

    下图是西班牙莱里达(Lleida)的一家养猪场。该场的猪粪是一家能源合作社(Som Energia Cooperativa)生产沼气的原料。请注意猪圈地上的缝隙,猪的粪便会落到下面的采集设施,便于收集利用。
    SpanishPigFarm

    下图是美国弗吉尼亚州切萨皮克的牛粪生产完沼气后的残余(digestate),很好的农业肥料。注意这些粪便经过生产沼气处理后,已无异味。今天刚读到老家的一家养鸭场直接把废物排到村外小河,造成严重污染,街坊村民怨声载道。如果利用鸭粪生产沼气和肥料,这种现象就不会发生。
    ChesapeakeBayDigestate

  • 用以上废料生产沼气,能减少它们在自然环境中的厌氧发酵过程,减少自然界生成并释放的沼气,自然也会减少温室效应。同时,我们用沼气能耗后产生的二氧化碳是carbon neutral的:即我们没有额外往大气层释放温室气体,这是和燃煤、燃油的很大不同,对应对全球气候变化起积极作用。用这种方式产生的能源已经很清洁,再加上该能源自产自销,不需要远程运输,会大大减少输送成本
  • 沼气生产能力的建立也给能源农业的发展提供可能,从而提升一个国家和地区的能源独立和能源安全。能源农业,即energy crop,其产品包括玉米、高粱、小米、杂草等。这些产品可以用来生产沼气,沼气液化后体积成百倍的缩小,非常便于储存和运输。这当然可以作为能源储备,减少从中东、美国、俄国、澳大利亚等地长途进口的石油、煤炭、和天然气。

沼气生产和利用是新兴产业。对环境压力日渐增大、城镇化迅猛发展的发展中国家如中国来说,我以为利用废物生产并利用沼气能源对改善环境、提高生活质量、应对全球气候变化、和提高能源独立安全有深远的意义!

又及:前两天才了解到习近平主席和我一样,也是沼气生产的大力推广者。最近看过习近平主席在2004年接受一家电视台的采访,提到是他在下乡当知青时和村民们一起建起了陕西省的第一座沼气池。整个访谈半小时左右,非常值得观看!习近平很有能力,很靠谱,很优秀。

图片来源:
瑞典斯德哥尔摩公交
瑞典Örebro的公交车
日本横滨污水污泥沼气生产处理设施
西班牙莱里达(Lleida)的一家养猪场
美国弗吉尼亚州切萨皮克的牛粪生产完沼气后的残余(digestate)

Comments (2)

JiMetrics now gathers SQL Server startup account

During the last few days, I’ve refactored JiMetrics and added a new function:

  • Used Pester to create more test cases for PowerShell functions I wrote;
  • Enhanced the design and code so JiMetrics also gathers SQL Server instance’s startup account, which can be useful.

If you don’t know what JiMetrics is, go to this page to find out. It’s is a tool that uses SQL Server to gather important SQL Server metrics in your enterprise. No additional software install, no registry change, no files to copy and move around that pollute your system, it only uses SQL Server, which you already have and it just works! It has been pretty useful to me and my co-workers. JiMetrics is open source and free to use. Check it out and let me know what you think.

I will keep improving this. My next objective is to play with SQL Server 2014 column-store and see if I can convert the collection database tables to column-store.

Comments

« Previous entries