enh mssql databases-size (#2479)

This commit is contained in:
qgarnier 2021-01-05 14:14:42 +01:00 committed by GitHub
parent 05338c1484
commit ee271016a0

View File

@ -247,12 +247,16 @@ sub new {
sub manage_selection { sub manage_selection {
my ($self, %options) = @_; my ($self, %options) = @_;
my ($unlimited_disk, $drives, $result) = ({}, {});
$options{sql}->connect(); $options{sql}->connect();
my ($extra_fields, $join) = ('', '');
if (defined($self->{option_results}->{add_unlimited_disk})) { if (defined($self->{option_results}->{add_unlimited_disk})) {
$extra_fields = ', volume_mount_point, total_bytes, available_bytes'; $options{sql}->query(query => qq{exec master.dbo.xp_fixeddrives});
$join = 'CROSS APPLY sys.dm_os_volume_stats(DB_ID(sys.database_files.name), sys.database_files.file_id)'; $result = $options{sql}->fetchall_arrayref();
foreach my $row (@$result) {
$drives->{ $row->[0] } = $row->[1] * 1024 * 1024;
}
} }
$options{sql}->query(query => qq{ $options{sql}->query(query => qq{
@ -272,16 +276,11 @@ sub manage_selection {
ELSE CAST(growth*8/1024 AS varchar(20)) + ''Mb'' ELSE CAST(growth*8/1024 AS varchar(20)) + ''Mb''
END, END,
[max_size] [max_size]
$extra_fields FROM sys.database_files'
FROM sys.database_files
$join'
}); });
my $unlimited_disk = {};
# limit can be: 'unlimited', 'overload', 'other'. # limit can be: 'unlimited', 'overload', 'other'.
$self->{databases} = {}; $self->{databases} = {};
my $result;
while ($result = $options{sql}->fetchall_arrayref()) { while ($result = $options{sql}->fetchall_arrayref()) {
last if (scalar(@$result) <= 0); last if (scalar(@$result) <= 0);
@ -318,10 +317,17 @@ sub manage_selection {
#max_size = -1 (=unlimited) #max_size = -1 (=unlimited)
if ($row->[7] == -1) { if ($row->[7] == -1) {
$self->{databases}->{ $row->[0] }->{$row->[3] . 'files'}->{limit} = 'unlimited'; $self->{databases}->{ $row->[0] }->{$row->[3] . 'files'}->{limit} = 'unlimited';
if (defined($self->{option_results}->{add_unlimited_disk}) && if (defined($self->{option_results}->{add_unlimited_disk})) {
!defined($unlimited_disk->{ $row->[0] . '_' . $row->[3] . 'files_' . $row->[8] })) { # look for the drives
$size += $row->[10]; foreach my $drive_name (keys %$drives) {
$unlimited_disk->{ $row->[0] . '_' . $row->[3] . 'files_' . $row->[8] } = 1; if ($row->[2] =~ /^$drive_name/) {
if (!defined($unlimited_disk->{ $row->[0] . '_' . $row->[3] . 'files_' . $drive_name })) {
$size += $drives->{$drive_name};
$unlimited_disk->{ $row->[0] . '_' . $row->[3] . 'files_' . $drive_name } = 1;
}
last;
}
}
} }
} elsif ($row->[7] > 0) { } elsif ($row->[7] > 0) {
$size = $row->[7] * 8 * 1024; $size = $row->[7] * 8 * 1024;