[rrd-users] Re: Adding many data samples at once

Marc Bilodeau marc at somix.com
Thu Apr 14 17:01:20 MEST 2005

You're right about the order of variables. It was a typo!.

I tried your recommendation and still I get the error message:

ERROR while updating 21.rrd: expected 2 data source readings (got 576)

The issue is with LOTS of RRDs the performance lags when you create an RRD
and try to fit a months worth of 5 minutes samples into several rrds at once
(converting some raw 5 minutes samples into rrd files). Right now, to do 10
rrd files at 8928 (number of 5 minutes samples in 31 days) takes 10 to 11
seconds. I'm trying to reduce this into a single RRD update perl file in
order to reduce the overall time to convert.

For those who are interested, here is my complete example:

use RRDs;

# 288 = day
# 2016 = 7 days
# 8928 = 31 days

if (! $ARGV[0]) { 
	print "\n\nNo Arg specified defaulting to 8928 (31 days)\n";
	$ARGV[0] = 8928;

print "Total Datapoints: $ARGV[0]\n";

foreach (1..10) {
	unlink "2${_}.rrd";
	RRDs::create ("2${_}.rrd",

$StartTime = time();

foreach $c (1 .. 10) {
	@DataPoints = undef;
	foreach $d (1 .. $ARGV[0]) {
		$TimeStamp = time() + ($d * 300);
		$in = int(rand(1000000));
		$out = int(rand(1000000));

		push (@DataPoints, "${TimeStamp}:${in}:${out}");
	#RRDs::update ("2${c}.rrd", @DataPoints);
	RRDs::update ("2${c}.rrd", join (" ", at DataPoints));

	my $ERR=RRDs::error;
	die "ERROR while updating 2${c}.rrd: $ERR\n" if $ERR;

$totalTime = time() - $StartTime;

print "total time : $totalTime\n";

I appreciate the help!


-----Original Message-----
From: Serge Maandag [mailto:serge.maandag at staff.zeelandnet.nl] 
Sent: Thursday, April 14, 2005 10:46 AM
To: Marc Bilodeau; rrd-users at list.ee.ethz.ch
Subject: RE: [rrd-users] Re: Adding many data samples at once

> foreach (1..5000) {
> 	$NewTimeStamp = $baseTime + 300;
> 	Push (@DataPoints, "ValIn:ValOut:$NewTimeStamp");
> } 

shouldn't that be "$NewTimeStamp:ValIn:ValOut" ?

> RRDs::update ("test.rrd", @DataPoints);
> The problem is that this will produce an error because it 
> tells me that it
> was looking for 2 data points but got 5000 (in this example). 
> How can I
> perform this update in 1 rrd update instead of (much slower) 
> 5000 updates?

Uhm, perhaps this works?

RRDs::update ("test.rrd", join (" ", at DataPoints));


Op de inhoud van dit e-mailbericht en de daaraan gehechte bijlagen is de
inhoud van de volgende disclaimer van toepassing:

For the content of this e-mail message and its attachment(s) the following
disclaimer applies: http://www.zeelandnet.nl/disclaimer.php

[This E-mail scanned for viruses by Declude Virus]

[This E-mail scanned for viruses by Declude Virus]

Unsubscribe mailto:rrd-users-request at list.ee.ethz.ch?subject=unsubscribe
Help        mailto:rrd-users-request at list.ee.ethz.ch?subject=help
Archive     http://lists.ee.ethz.ch/rrd-users
WebAdmin    http://lists.ee.ethz.ch/lsg2.cgi

More information about the rrd-users mailing list