on 2013 Jul 26 5:51 AM
Hi Community,
a customer starts dbvalid every night on a 68 GB Backup of SQL Anywhere DB. Up to 20.7.2013 that takes 3 hours. Since 20.7.2003 it takes 12 to 15 hours. Increasing cache from 4 to 6 GB leads to duration of 10 hours. What can be the reason for this dramatically increase of time?
Some more information: Sql Anywhere 10.0.1.3415 64 bit. VM, quad core, 2.93 GHz, Intel Xeon, Win2008 R2, 24 GB RAM. Backup-DB ist startet by: dbeng -c 6g -ca 0 . Validation is startet by: dbvalid -q -fx . During validation resource-monitor shows reading of dbeng by 53,000,000 B/min.
53 MBytes per minute mean < 1MBytes per second, so just the reading of the DB file would last more than 18 hours. I would check the underlying IO system, maybe you have a degraded performance there.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I agree. With -fx, I believe most of the IO should be sequential since the index probes (which can require a lot of random IO if the cache is too small) would be skipped. Sequential IOs should be fast. Maybe another process in this VM or another VM was doing IOs to the same drive? That would introduce randomness to the IO and drastically lower performance.
Copying the database to a "real" machine (not a VM), preferably with no other activity for that time, and running the validation there should give you the chance to compare results.
One wild guess is that the database was subject to some massive operation (deletes and inserts, for example) that suddenly caused it to become internally fragmented.
The builtin procedures sa_index_levels, sa_index_density, sa_table_fragmentation and sa_table_stats can be used to tell you if that is true. Here are two "value added" procedures that display columns named "concerns" and "fragmentation" to warn you of possible problems; the sample output comes from the V10 demo database (one "concern", no "fragmentation"):
CREATE PROCEDURE p_index_fragmentation ( IN @owner_name VARCHAR ( 128 ) ) RESULT ( table_name VARCHAR ( 128 ), index_name VARCHAR ( 128 ), rows UNSIGNED BIGINT, leaf_pages UNSIGNED INTEGER, levels INTEGER, density NUMERIC ( 8, 6 ), concerns VARCHAR ( 100 ) ) BEGIN SELECT sa_index_levels.TableName AS table_name, sa_index_levels.IndexName AS index_name, SYSTABLE.count AS rows, sa_index_density.LeafPages AS leaf_pages, sa_index_levels.Levels AS levels, sa_index_density.Density AS density, STRING ( IF levels > 2 THEN 'deep' ELSE '' ENDIF, IF levels > 1 AND density < 0.5 THEN IF levels > 2 THEN ', low density' ELSE 'low density' ENDIF ELSE '' ENDIF ) AS concerns FROM dbo.sa_index_levels ( owner_name = @owner_name ) INNER JOIN dbo.sa_index_density ( owner_name = @owner_name ) ON sa_index_density.TableName = sa_index_levels.TableName AND sa_index_density.IndexName = sa_index_levels.IndexName INNER JOIN sys.SYSTABLE ON SYSTABLE.table_name = sa_index_density.TableName WHERE USER_NAME ( SYSTABLE.creator ) = @owner_name ORDER BY table_name, index_name; END; CHECKPOINT; CALL p_index_fragmentation ( 'GROUPO' ); -- ***** USE THE CORRECT OWNER NAME table_name,index_name,rows,leaf_pages,levels,density,concerns 'Contacts','ContactsKey',60,1,1,0.239990,'' 'Contacts','FK_CustomerID_ID',60,1,1,0.185303,'' 'Customers','CustomersKey',126,1,1,0.417725,'' 'Customers','IX_customer_name',126,1,1,0.789795,'' 'Departments','DepartmentsKey',5,1,1,0.092529,'' 'Departments','FK_DepartmentHeadID_EmployeeID',5,1,1,0.093262,'' 'Employees','EmployeesKey',75,1,1,0.281738,'' 'Employees','FK_DepartmentID_DepartmentID',75,1,1,0.164795,'' 'FinancialCodes','FinancialCodesKey',7,1,1,0.099121,'' 'FinancialData','FinancialDataKey',84,1,1,0.343262,'' 'FinancialData','FK_Code_Code',84,1,1,0.174316,'' 'Products','IX_product_color',10,1,1,0.102051,'' 'Products','IX_product_description',10,1,1,0.130127,'' 'Products','IX_product_name',10,1,1,0.106445,'' 'Products','IX_product_size',10,1,1,0.102783,'' 'Products','ProductsKey',10,1,1,0.105957,'' 'SalesOrderItems','FK_ID_ID',1097,3,2,0.806315,'' 'SalesOrderItems','FK_ProductID_ID',1097,3,2,0.456380,'low density' 'SalesOrderItems','SalesOrderItemsKey',1097,4,2,0.936584,'' 'SalesOrders','FK_CustomerID_ID',648,2,2,0.586548,'' 'SalesOrders','FK_FinancialCode_Code',648,1,1,0.715576,'' 'SalesOrders','FK_SalesRepresentative_EmployeeID',648,1,1,0.758545,'' 'SalesOrders','SalesOrdersKey',648,2,2,0.950562,'' CREATE PROCEDURE p_table_fragmentation ( IN @owner_name VARCHAR ( 128 ) ) RESULT ( table_name VARCHAR ( 128 ), rows UNSIGNED INTEGER, row_segments UNSIGNED BIGINT, segments_per_row NUMERIC ( 20, 4 ), table_pages UNSIGNED BIGINT, extension_pages UNSIGNED BIGINT, rows_per_table_page NUMERIC ( 20, 4 ), extension_pages_per_segment NUMERIC ( 20, 4 ) ) BEGIN SELECT * INTO #sa_table_fragmentation FROM sa_table_fragmentation ( owner_name = @owner_name ); SELECT #sa_table_fragmentation.TableName AS table_name, #sa_table_fragmentation.rows AS rows, #sa_table_fragmentation.row_segments AS row_segments, #sa_table_fragmentation.segs_per_row AS segments_per_row, sa_table_stats.table_page_count AS table_pages, sa_table_stats.ext_page_count AS extension_pages, IF table_pages = 0 THEN 0 ELSE CAST ( rows AS NUMERIC ( 20, 4 ) ) / CAST ( table_pages AS NUMERIC ( 20, 4 ) ) ENDIF AS rows_per_table_page, IF rows = 0 THEN 0 ELSE CAST ( extension_pages AS NUMERIC ( 20, 4 ) ) / CAST ( row_segments AS NUMERIC ( 20, 4 ) ) ENDIF AS extension_pages_per_segment FROM #sa_table_fragmentation INNER JOIN sa_table_stats() ON sa_table_stats.table_name = #sa_table_fragmentation.TableName WHERE sa_table_stats.creator = @owner_name ORDER BY table_name; END; SELECT table_name, rows, row_segments, segments_per_row, table_pages, extension_pages, rows_per_table_page, extension_pages_per_segment, IF rows >= 1000 AND ( segments_per_row >= 1.05 OR extension_pages_per_segment >= 2 ) THEN 'Fragmentation!' ELSE '' ENDIF AS fragmentation FROM p_table_fragmentation ( 'GROUPO' ) -- ***** USE THE CORRECT OWNER NAME ORDER BY table_name; table_name,rows,row_segments,segments_per_row,table_pages,extension_pages,rows_per_table_page,extension_pages_per_segment,fragmentation 'Contacts',60,60,1.0000,2,0,30.0000,0.0000,'' 'Customers',126,126,1.0000,4,0,31.5000,0.0000,'' 'Departments',5,5,1.0000,1,0,5.0000,0.0000,'' 'Employees',75,75,1.0000,3,0,25.0000,0.0000,'' 'FinancialCodes',7,7,1.0000,1,0,7.0000,0.0000,'' 'FinancialData',84,84,1.0000,1,0,84.0000,0.0000,'' 'Products',10,10,1.0000,1,33,10.0000,3.3000,'' 'SalesOrderItems',1097,1097,1.0000,7,0,156.7143,0.0000,'' 'SalesOrders',648,648,1.0000,6,0,108.0000,0.0000,''
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
81 | |
11 | |
10 | |
10 | |
10 | |
8 | |
8 | |
7 | |
5 | |
5 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.