Hello Rick,
today I was able to have a look at the derby.log of that installation, but unfortunately had to realize that the property "derby.infolog.append=true" wasn't set. Means the log was more or less empty. I'll active that and keep an eye on it. Hopefully I'll see something there next time. Regards, Gerrit -----Ursprüngliche Nachricht----- Von: Rick Hillegas <rick.hille...@gmail.com> Gesendet: Samstag, 19. September 2020 18:27 An: Hohl, Gerrit <g.h...@aurenz.de>; Derby Discussion <derby-user@db.apache.org> Betreff: Re: AW: Indexes grow over time insanly big and can't be shrunk Thanks for the extra information, Gerrit. I don't have any theories about why the primary key and EVENT_LOG_ENTRY_TIME_CREATED_INDEX are failing to compress. I don't have any better suggestion than the following: 1) Run SYSCS_DIAG.SPACE_TABLE() before and after SYSCS_UTIL.SYSCS_COMPRESS_TABLE(). 2) If you notice that Derby is failing to compress those two indexes again, look in derby.log for errors or other diagnostics which may provide some clues. Thanks, -Rick On 9/19/20 1:51 AM, Hohl, Gerrit wrote: > Hello everyone, > > I'm sorry, I noticed that only replied to Rick. 😅 > > > Regards, > Gerrit > > > -----Ursprüngliche Nachricht----- > Von: Hohl, Gerrit > Gesendet: Mittwoch, 16. September 2020 09:21 > An: Rick Hillegas <rick.hille...@gmail.com> > Betreff: AW: Indexes grow over time insanly big and can't be shrunk > > Hello Rick, > > > thanks for your reply. > > > A1) SELECT * FROM TABLE(SYSCS_DIAG.SPACE_TABLE()) AS x WHERE > (x.TABLEID = '1b30f0f5-0168-60ad-cb8f-0000366e0651'); > > CONGLOMERATENAME |ISIND&|NUMALLOCATEDPAGES |NUMFREEPAGES > |NUMUNFILLEDPAGES |PAGESIZE |ESTIMSPACESAVING |TABLEID > -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- > EVENT_LOG_ENTRY |0 |1186 |115 > |1 |32768 |3768320 > |1b30f0f5-0168-60ad-cb8f-0000366e0651 > SQL190118123711680 |1 |1220394 |0 > |1190424 |4096 |0 > |1b30f0f5-0168-60ad-cb8f-0000366e0651 > EVENT_LOG_ENTRY_LOG_NAME_INDEX |1 |245 |151 > |115 |4096 |618496 > |1b30f0f5-0168-60ad-cb8f-0000366e0651 > EVENT_LOG_ENTRY_SOURCE_INDEX |1 |437 |177 > |241 |4096 |724992 > |1b30f0f5-0168-60ad-cb8f-0000366e0651 > EVENT_LOG_ENTRY_TIME_CREATED_INDEX |1 |2032376 |0 > |1965938 |4096 |0 > |1b30f0f5-0168-60ad-cb8f-0000366e0651 > EVENT_LOG_ENTRY_LOG_LEVEL_INDEX |1 |181 |134 > |76 |4096 |548864 > |1b30f0f5-0168-60ad-cb8f-0000366e0651 > EVENT_LOG_ENTRY_USER_NAME_INDEX |1 |258 |208 > |113 |4096 |851968 > |1b30f0f5-0168-60ad-cb8f-0000366e0651 > > > A2) CALL SYSCS_UTIL.SYSCS_COMPRESS_TABLE('app', 'event_log_entry', 1); > > That command is only issued if the cumulated ESTIMSPACESAVING for the table > and its indexes is greater than 0. > But I'm not sure if Derby really reorganised the both problem indexes - > namely SQL190118123711680 (primary key) and > EVENT_LOG_ENTRY_TIME_CREATED_INDEX - because there was nothing to free. > > At the point I got that information the compress command also may have failed > because there wasn't enough space left. > But I think it doesn't matter because before there was enough disk space and > at that time the index was already growing. > Means none of the previous executions was able to reorganize those 2 indexes > also there was enough space back then. > > > A3) Not sure what you mean with "pattern of activity", but we simply have a > lot of "INSERT INTO event_log_entry (...) VALUES (...)" statements. > At the start of the application there is also a "SELECT COUNT(*) FROM > event_log_entry" to get the current number of entries. > From the on the application keeps track of it internally. > > If 10.000 entries are reached, for each entry which exceeds that number, > another entry is deleted (means the oldest). Those actions can also overlap. > > > Here the DDL of the table and its indexes: > > CREATE TABLE event_log_entry ( > id INTEGER NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY (START WITH > 1, INCREMENT BY 1), > flags INT, > changecount INT, > checksum BIGINT, > log_name VARCHAR(256), > source VARCHAR(256), > time_created VARCHAR(17), > log_level VARCHAR(3), > user_name VARCHAR(256), > data BLOB(65536) > ); > CREATE INDEX event_log_entry_log_name_index ON event_log_entry > (log_name); CREATE INDEX event_log_entry_source_index ON > event_log_entry (source); CREATE INDEX > event_log_entry_time_created_index ON event_log_entry (time_created); > CREATE INDEX event_log_entry_log_level_index ON event_log_entry > (log_level); CREATE INDEX event_log_entry_user_name_index ON > event_log_entry (user_name); > > > I already repaired it by dropping the indexes and recreating them (as I wrote > in my mail). > Now everything is working perfectly again. > But that doesn't mean that it won't happen again, of course. 😉 > > > Regards > Gerrit > > -----Ursprüngliche Nachricht----- > Von: Rick Hillegas <rick.hille...@gmail.com> > Gesendet: Dienstag, 15. September 2020 17:27 > An: Derby Discussion <derby-user@db.apache.org>; Hohl, Gerrit > <g.h...@aurenz.de> > Betreff: Re: Indexes grow over time insanly big and can't be shrunk > > Hi Gerrit, > > I don't have a theory about what caused this problem. Maybe > COMPRESS_TABLE() has a serious bug. A couple questions: > > Q1) Do you have the results of SPACE_TABLE() for this situation? > > Q2) What value did you specify for the SEQUENTIAL argument of > COMPRESS_TABLE()? > > Q3) Other than COMPRESS_TABLE(), what is the pattern of activity on this > table? > > If this happens again, take a look at the ALTER TABLE DROP PRIMARY KEY and > ALTER TABLE ADD CONSTRAINT commands. They may make it simpler to repair the > damage. > > Thanks, > -Rick > > On 9/15/20 5:14 AM, Hohl, Gerrit wrote: >> Hello everyone, >> >> we use Apache Derby v10.14.2.0 in our software and now have a problem with >> an installation. >> >> Every night we perform a compact on all tables - at least the ones which can >> be shrunk (SYSCS_DIAG.SPACE_TABLE() and >> SYSCS_UTIL.SYSCS_COMPRESS_TABLE(String, String, Smallint)). >> Normally that constellation works fine. >> But now faced an installation which ran out of free disk space without any >> reason. >> >> After some analysing we narrowed it down to one table which is meant for >> logging. >> Records are inserted and deleted often (the size of it is limited at 10.000 >> entries through the software). >> The maximum - based on the structure - should be around 40 MB. Not really >> much. >> So we were very surprised seeing that this thing took around 14 GB. >> >> I realized that I accumulated the table and its indexes to get that value. >> After splitting it up, I saw that the table itself really only took 40 MB. >> But two of the 6 indexes - one was the primary key index - took more than 13 >> GB of space. >> Apache Derby also said no NUMFREEPAGES and no ESTIMSPACESAVING. >> >> My solution then was shutting down the service (in-process database), >> connect to the database, dropping the indexes, create a new column for >> temporarily storing the primary key value, copying the values, also dropping >> that column, recreating the primary key column, copying everything back, >> dropping the temporary primary key column, creating all the indexes again. >> Now everything is back to normal and the table *including* its indexes is 40 >> MB. >> >> Any idea on this? Why did the index grow that big? What can I do preventing >> it? >> Seems reorganising isn't an option as Apache Derby itself doesn't realize >> that it can free space. >> >> Regards, >> Gerrit >> >>