在客户环境梳理架构发现,有一些exchange 2013后端服务器负载很高,一部分原因是数据库内用户的活跃度很高,邮箱使用率很高,另部分原因是版本为CU10内容索引的noderunner服务会占用比较大的开销,想进行一些优化,将一些负载较高的BE后端数据库用户迁移到其他负载较低的后端BE去,但是怎么迁移,迁移到哪一个负载低的数据库就比较尴尬,经过各种谷歌搜索整理了一个脚本可以帮助做这个事。

当时exchange建设时为每个数据库都分布了大概500个用户,但每一个邮箱用户的使用情况都是不一样的,管理员也没有办法进行控制,因为是用户层面的行为,就会造成每个BE后端服务器的负载不均衡。

通过一个powershell脚本能够获得到每个数据库的名字、大小以及用户数量并且直接输出成csv比较友好的界面,可以帮助我们进行数据性能的优化

将脚本分享出来希望大家有用,适用于exchange 2013环境,其他版本请自行测试

输出信息如下:

clip_p_w_picpath001





Add-PSSnapin microsoft.exchange*

add-pssnapin Microsoft.Exchange.Management.PowerShell.E2010

#$MailboxDatabases=Get-MailboxDatabase -Status | select Name,DatabaseSize

$dbs = Get-MailboxDatabase -Status| Where {$_.Recovery -ne $true}

$dbs = $dbs | sort-object name

$output='C:\databaseSize.csv'

$title="databasename,Servername,databasesize,count"

$title>>$output

foreach ($db in $dbs)

     #Get the mailbox count for the database

     $mailboxes = Get-Mailbox -database $db -IgnoreDefaultScope -Resultsize Unlimited -erroraction silentlycontinue

     $mbcount = $mailboxes.count


    $dbsize=$db| select Server,DatabaseSize

    #$databaseSize=$dbsize.DatabaseSize.ToString().Split("GB")[0]

    $databaseSize=$dbsize.DatabaseSize.ToBytes()/1024/1024/1024 

    $message="$($db.name),$($dbsize.Server),$databaseSize,$($mailboxes.count)"

     $message>>$output

     

}