Re: Growth planning

Rob Sargent <robjsargent@gmail.com>

From: Rob Sargent <robjsargent@gmail.com>
To: Israel Brewster <ijbrewster@alaska.edu>
Cc: "pgsql-general@postgresql.org" <pgsql-general@postgresql.org>
Date: 2021-10-04T17:22:08Z
Lists: pgsql-general
On 10/4/21 11:09 AM, Israel Brewster wrote:
>> On Oct 4, 2021, at 8:46 AM, Rob Sargent <robjsargent@gmail.com 
>> <mailto:robjsargent@gmail.com>> wrote:
>>
>>> On Oct 4, 2021, at 10:22 AM, Israel Brewster <ijbrewster@alaska.edu 
>>> <mailto:ijbrewster@alaska.edu>> wrote:
>> Guessing the “sd” is "standard deviation”?  Any chance those stddevs 
>> are easily calculable from base data?  Could cut your table size in 
>> half (and put those 20 cores to work on the reporting).
>
> Possible - I’d have to dig into that with the script author. I was 
> just handed an R script (I don’t work with R…) and told here’s the 
> data it needs, here’s the output we need stored in the DB. I then 
> spent just enough time with the script to figure out how to hook up 
> the I/O. The schema is pretty much just a raw dump of the output - I 
> haven’t really spent any resources figuring out what, exactly, the 
> data is. Maybe I should :-)
>
>>  And I wonder if the last three indices are strictly necessary? They 
>> take disc space too.
>
> Not sure. Here’s the output from pg_stat_all_indexes:
>
> volcano_seismology=# select * from pg_stat_all_indexes where 
> relname='data';
>  relid | indexrelid | schemaname | relname |   indexrelname        | 
> idx_scan | idx_tup_read | idx_tup_fetch
> -------+------------+------------+---------+---------------------------+----------+--------------+---------------
>  19847 |      19869 | public     | data    | data_pkey           |    
>     0 |            0 |             0
>  19847 |      19873 | public     | data    | 
> date_station_channel_idx  |   811884 |  12031143199 |   1192412952
>  19847 |      19875 | public     | data    | station_channel_epoch_idx 
> |        8 |       318506 |   318044
>  19847 |      19876 | public     | data    | station_data_idx        
>   |     9072 |         9734 |   1235
>  19847 |      19877 | public     | data    | station_date_idx        
>   |   721616 |  10927533403 |   10908912092
>  19847 |      20479 | public     | data    | 
> data_station_channel_idx  |    47293 | 194422257262 |   6338753379
> (6 rows)
>
> so they *have* been used (although not the station_data_idx so much), 
> but this doesn’t tell me when it was last used, so some of those may 
> be queries I was experimenting with to see what was fastest, but are 
> no longer in use. Maybe I should keep an eye on this for a while, see 
> which values are increasing.
>
>>
>> But my bet is you’re headed for partitioning on datetime or perhaps 
>> station.
>
> While datetime partitioning seems to be the most common, I’m not clear 
> on how that would help here, as the most intensive queries need *all* 
> the datetimes for a given station, and even the smaller queries would 
> be getting an arbitrary time range potentially spanning several, if 
> not all, partitions. Now portioning on station seems to make sense - 
> there are over 100 of those, and pretty much any query will only deal 
> with a single station at a time. Perhaps if more partitioning would be 
> better, portion by both station and channel? The queries that need to 
> be fastest will only be looking at a single channel of a single station.
>
> I’ll look into this a bit more, maybe try some experimenting while I 
> still have *relatively* little data. My main hesitation here is that 
> in the brief look I’ve given partitioning so far, it looks to be a 
> royal pain to get set up. Any tips for making that easier?
>
>
If no queries address multiple stations you could do a table per 
station.  Doesn't smell good but you have a lot of data and well, speed 
kills.

I think the date-station-channel could "take over" for the 
station-date.  Naturally the latter is chosen if you give just the two 
fields, but I would be curious to see how well the former performs given 
just its first two fields(when station-date doesn't exist).