Skip to content

"Virtuoso 42000 Error The estimated execution time 0 (sec) exceeds the limit of 400 (sec)" #1395

Description

@u0078867

This happens sistematically on Virtuoso 7:7.2.13 when:

  • ~100k triples are added to one graph (either via DB.DBA.TTLP_MT(...) or chunked INSERT DATA {}). Other side graphs have way lower order of magnitude in triples.
  • after preloading above, a DELETE {} INSERT {} WHERE {} is attempted (no variables, just a dozen of triples in each section) via SPARQL endpoint.
  • the error above happens also when acting on other graphs than the large one.

Dropping/clearing the large graph via isql does not help. Only stopping Virtuoso container, restarting it in an empty database folder and no big data preload solves the issue. Ok for now, since just testing and not in production env.

My INI file:

;
;  virtuoso.ini
;
;  Configuration file for the OpenLink Virtuoso VDBMS Server
;
;  To learn more about this product, or any other product in our
;  portfolio, please check out our web site at:
;
;      http://virtuoso.openlinksw.com/
;
;  or contact us at:
;
;      general.information@openlinksw.com
;
;  If you have any technical questions, please contact our support
;  staff at:
;
;      technical.support@openlinksw.com
;
;
;  Database setup
;
[Database]
DatabaseFile       = ../database/virtuoso.db
ErrorLogFile       = ../database/virtuoso.log
LockFile           = ../database/virtuoso.lck
TransactionFile    = ../database/virtuoso.trx
xa_persistent_file = ../database/virtuoso.pxa
ErrorLogLevel      = 7
FileExtend         = 200
MaxCheckpointRemap = 2000
Striping           = 0
TempStorage        = TempDatabase

[TempDatabase]
DatabaseFile       = ../database/virtuoso-temp.db
TransactionFile    = ../database/virtuoso-temp.trx
MaxCheckpointRemap = 2000
Striping           = 0

;
;  Server parameters
;
[Parameters]
ServerPort               = 1111
LiteMode                 = 0
DisableUnixSocket        = 1
DisableTcpSocket         = 0
;SSLServerPort			= 2111
;SSLCertificate			= cert.pem
;SSLPrivateKey			= pk.pem
;X509ClientVerify		= 0
;X509ClientVerifyDepth		= 0
;X509ClientVerifyCAFile		= ca.pem
MaxClientConnections     = 10
CheckpointInterval       = 60
O_DIRECT                 = 0
CaseMode                 = 2
MaxStaticCursorRows      = 5000
CheckpointAuditTrail     = 0
AllowOSCalls             = 0
SchedulerInterval        = 10
DirsAllowed              = ., ../vad, /usr/share/proj
ThreadCleanupInterval    = 1
ThreadThreshold          = 10
ResourcesCleanupInterval = 1
FreeTextBatchSize        = 100000
SingleCPU                = 0
VADInstallDir            = ../vad/
PrefixResultNames        = 0
RdfFreeTextRulesSize     = 100
IndexTreeMaps            = 64
MaxMemPoolSize           = 200000000
PrefixResultNames        = 0
MacSpotlight             = 0
MaxQueryMem              = 2G	; memory allocated to query processor
VectorSize               = 1000	; initial parallel query vector (array of query operations) size
MaxVectorSize            = 1000000	; query vector size threshold.
AdjustVectorSize         = 0
ThreadsPerQuery          = 4
AsyncQueueMaxThreads     = 10
;;
;; When running with large data sets, one should configure the Virtuoso
;; process to use between 2/3 to 3/5 of free system memory and to stripe
;; storage on all available disks.
;;
;; Uncomment next two lines if there is 2 GB system memory free
;NumberOfBuffers          = 170000
;MaxDirtyBuffers          = 130000
;; Uncomment next two lines if there is 4 GB system memory free
;NumberOfBuffers          = 340000
; MaxDirtyBuffers          = 250000
;; Uncomment next two lines if there is 8 GB system memory free
;NumberOfBuffers          = 680000
;MaxDirtyBuffers          = 500000
;; Uncomment next two lines if there is 16 GB system memory free
;NumberOfBuffers          = 1360000
;MaxDirtyBuffers          = 1000000
;; Uncomment next two lines if there is 32 GB system memory free
;NumberOfBuffers          = 2720000
;MaxDirtyBuffers          = 2000000
;; Uncomment next two lines if there is 48 GB system memory free
;NumberOfBuffers          = 4000000
;MaxDirtyBuffers          = 3000000
;; Uncomment next two lines if there is 64 GB system memory free
;NumberOfBuffers          = 5450000
;MaxDirtyBuffers          = 4000000
;;
;; Note the default settings will take very little memory
;; but will not result in very good performance
;;
NumberOfBuffers          = 10000
MaxDirtyBuffers          = 6000

[HTTPServer]
ServerPort                  = 8890
ServerRoot                  = ../vsp
MaxClientConnections        = 10
DavRoot                     = DAV
EnabledDavVSP               = 0
HTTPProxyEnabled            = 0
TempASPXDir                 = 0
DefaultMailServer           = localhost:25
MaxKeepAlives               = 10
KeepAliveTimeout            = 10
MaxCachedProxyConnections   = 10
ProxyConnectionCacheTimeout = 15
HTTPThreadSize              = 280000
HttpPrintWarningsInOutput   = 0
Charset                     = UTF-8
;HTTPLogFile		        = logs/http.log
MaintenancePage             = atomic.html
EnabledGzipContent          = 1

[AutoRepair]
BadParentLinks = 0

[Client]
SQL_PREFETCH_ROWS  = 100
SQL_PREFETCH_BYTES = 16000
SQL_QUERY_TIMEOUT  = 0
SQL_TXN_TIMEOUT    = 0
;SQL_NO_CHAR_C_ESCAPE		= 1
;SQL_UTF8_EXECS			= 0
;SQL_NO_SYSTEM_TABLES		= 0
;SQL_BINARY_TIMESTAMP		= 1
;SQL_ENCRYPTION_ON_PASSWORD	= -1

[VDB]
ArrayOptimization           = 0
NumArrayParameters          = 10
VDBDisconnectTimeout        = 1000
KeepConnectionOnFixedThread = 0

[Replication]
ServerName   = db-FOCAL-PORT
ServerEnable = 1
QueueMax     = 50000

;
;  Striping setup
;
;  These parameters have only effect when Striping is set to 1 in the
;  [Database] section, in which case the DatabaseFile parameter is ignored.
;
;  With striping, the database is spawned across multiple segments
;  where each segment can have multiple stripes.
;
;  Format of the lines below:
;    Segment<number> = <size>, <stripe file name> [, <stripe file name> .. ]
;
;  <number> must be ordered from 1 up.
;
;  The <size> is the total size of the segment which is equally divided
;  across all stripes forming  the segment. Its specification can be in
;  gigabytes (g), megabytes (m), kilobytes (k) or in database blocks
;  (b, the default)
;
;  Note that the segment size must be a multiple of the database page size
;  which is currently 8k. Also, the segment size must be divisible by the
;  number of stripe files forming  the segment.
;
;  The example below creates a 200 meg database striped on two segments
;  with two stripes of 50 meg and one of 100 meg.
;
;  You can always add more segments to the configuration, but once
;  added, do not change the setup.
;
[Striping]
Segment1 = 100M, db-seg1-1.db, db-seg1-2.db
Segment2 = 100M, db-seg2-1.db
;...
;[TempStriping]
;Segment1			= 100M, db-seg1-1.db, db-seg1-2.db
;Segment2			= 100M, db-seg2-1.db
;...
;[Ucms]
;UcmPath			= <path>
;Ucm1				= <file>
;Ucm2				= <file>
;...

[Zero Config]
ServerName = virtuoso (FOCAL-PORT)
;ServerDSN			= ZDSN
;SSLServerName			=
;SSLServerDSN			=

[Mono]
;MONO_TRACE			= Off
;MONO_PATH			= <path_here>
;MONO_ROOT			= <path_here>
;MONO_CFG_DIR			= <path_here>
;virtclr.dll			=

[URIQA]
DynamicLocal = 0
DefaultHost  = localhost:8890

[SPARQL]
;ExternalQuerySource		= 1
;ExternalXsltSource 		= 1
;DefaultGraph      		= http://localhost:8890/dataspace
;ImmutableGraphs    		= http://localhost:8890/dataspace
ResultSetMaxRows           = 10000
MaxConstructTriples        = 10000
MaxQueryCostEstimationTime = 400	; in seconds
MaxQueryExecutionTime      = 60	; in seconds
DefaultQuery               = select distinct ?Concept where {[] a ?Concept} LIMIT 100
DeferInferenceRulesInit    = 0	; controls inference rules loading
MaxMemInUse                = 0	; limits the amount of memory for construct dict (0=unlimited)
;LabelInferenceName		= facets	; Only needed when using the Faceted Browser
;PingService       		= http://rpc.pingthesemanticweb.com/

[Plugins]
LoadPath = ../hosting
Load1    = plain, geos
Load2    = plain, graphql
Load3    = plain, shapefileio

Thank you for shedding any light.

Activity

  1. HughWilliams commented on Jan 28, 2026

    @HughWilliams
    Collaborator

    Have you tuned your Virtuoso database for the specific environment it is running in, as I see the memory buffer are still set to the minimal defaults of:

    NumberOfBuffers          = 10000
    MaxDirtyBuffers          = 6000
    

    The MaxQueryCostEstimationTime = 400 setting in the INI file should be commented out, as it is only meant for use when debugging.

    What does the output of the Virtuoso status(); command run from isql report as to the state of the database when the error is occurring, i.e., after the indicated DELETE {} INSERT {} WHERE {} statements ?

  2. u0078867 commented on Apr 29, 2026

    @u0078867
    Author

    Fixed with above. Closing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions