Condividi tramite


Sistema lavori di riferimento table

Nota

Il lakeflowschema era noto in precedenza come workflow. Il contenuto di entrambi gli schemi è identico. Per rendere visibile la lakeflowschema, è necessario abilitarla separatamente.

Questo articolo è una guida su come utilizzare il sistema lakeflow per monitorare i lavori nel tuo account con il tables. Questi tables includono i record di tutte le aree di lavoro nel tuo account distribuito nella stessa regione cloud. Per visualizzare i record di un'altra area, è necessario visualizzare il tables da un'area di lavoro distribuita in tale area.

Requisiti

  • Il system.lakeflowschema deve essere abilitato da un amministratore dell'account. Vedere Abilitare gli schemi di sistema table.
  • Per accedere a questi sistemi tables, gli utenti devono:
    • Essere sia un amministratore del metastore che un amministratore dell'account oppure
    • Disporre delle autorizzazioni USE e SELECT per gli schemi di sistema. Verificare l'accesso al sistema Granttables.

Lavori disponibili tables

Tutti i sistemi correlati ai lavori tables risiedono nel system.lakeflowschema. Attualmente, il schema ospita quattro tables:

Table Descrizione Supporta lo streaming Periodo di conservazione gratuito Includono dati globali o regionali
incarichi (anteprima pubblica) Tiene traccia di tutti i lavori creati nell'account 365 giorni Regionale
job_tasks (anteprima pubblica) Tiene traccia di tutte le attività lavorative che vengono eseguite nell'account 365 giorni Regionale
job_run_timeline (anteprima pubblica) Tiene traccia delle esecuzioni delle attività e dei metadati correlati 365 giorni Regionale
job_task_run_timeline (anteprima pubblica) Tiene traccia delle esecuzioni delle attività di processo e dei metadati correlati 365 giorni Regionale

Informazioni di riferimento dettagliate schema

Nelle sezioni seguenti vengono forniti schema riferimenti per ciascun sistema relativo ai lavori tables.

lavori tableschema

Il jobstable è una dimensione a modifica lenta table (SCD2). Quando una riga viene modificata, viene generata una nuova riga, sostituendo logicamente quella precedente.

Table percorso: system.lakeflow.jobs

nome Column Tipo di dati Descrizione Note
account_id stringa ID dell'account a cui appartiene l'attività
workspace_id stringa ID dell'area di lavoro a cui appartiene questo processo
job_id stringa ID del lavoro Solo univoco all'interno di una singola area di lavoro
name stringa Nome del processo fornito dall'utente
description stringa Descrizione fornita dall'utente del lavoro Non popolato per le righe emesse prima della fine di agosto 2024
creator_id stringa ID del principale che ha creato il processo di lavoro
tags stringa Tag personalizzati forniti dall'utente associati a questo processo
change_time timestamp Ora dell'ultima modifica del lavoro Timezone registrato come +00:00 (UTC)
delete_time timestamp L'ora in cui il lavoro è stato eliminato dall'utente Timezone è registrato come +00:00 (UTC)
run_as stringa ID dell'utente o dell'entità servizio le cui autorizzazioni vengono usate per l'esecuzione del processo

Query di esempio

-- Get the most recent version of a job
SELECT
  *,
  ROW_NUMBER() OVER(PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
FROM
  system.lakeflow.jobs QUALIFY rn=1

Attività lavorativa tableschema

Le mansioni lavorative table sono una dimensione a cambiamento lento table (SCD2). Quando una riga viene modificata, viene generata una nuova riga, sostituendo logicamente quella precedente.

Table percorso: system.lakeflow.job_tasks

nome Column Tipo di dati Descrizione Note
account_id stringa ID dell'account a cui appartiene l'attività
workspace_id stringa ID dell'area di lavoro a cui appartiene questo processo
job_id stringa ID del lavoro Solo univoco all'interno di una singola area di lavoro
task_key stringa Chiave di riferimento per un'attività in una mansione Solo unico all'interno di un singolo compito
depends_on_keys array Chiavi di attività di tutte le dipendenze upstream di questa attività
change_time timestamp Ora dell'ultima modifica dell'attività Timezone registrato come +00:00 (UTC)
delete_time timestamp Ora in cui un'attività è stata eliminata dall'utente Timezone registrato come +00:00 (UTC)

Query di esempio

-- Get the most recent version of a job task
SELECT
  *,
  ROW_NUMBER() OVER(PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
FROM
  system.lakeflow.job_tasks QUALIFY rn=1

sequenza temporale di esecuzione del procedimento tableschema

La sequenza temporale di esecuzione del processo table non è modificabile e viene completata al momento della produzione.

Table percorso: system.lakeflow.job_run_timeline

nome Column Tipo di dati Descrizione Note
account_id stringa ID dell'account a cui appartiene l'attività
workspace_id stringa ID dell'area di lavoro a cui appartiene questo processo
job_id stringa ID del lavoro Questa chiave è univoca solo all'interno di una singola area di lavoro
run_id stringa ID dell'esecuzione del processo
period_start_time timestamp Ora di inizio per la corsa o per il periodo di tempo Timezone informazione viene registrata alla fine del valore con +00:00 che rappresenta UTC
period_end_time timestamp Ora di fine per l'esecuzione o l'intervallo di tempo L'informazione Timezone viene registrata alla fine del valore con +00:00 che rappresenta l'ora UTC
trigger_type stringa Tipo di trigger che può generare un'esecuzione Per le possibili values, vedere Tipo di attivazione values
run_type stringa Tipo di esecuzione del lavoro Per le possibili values, vedere Tipo di esecuzione values
run_name stringa Nome di esecuzione fornito dall'utente associato all'esecuzione del processo
compute_ids array Array contenente gli ID di calcolo del job per l'esecuzione del job padre Usare per identificare il cluster di processi utilizzato dai tipi di esecuzioni WORKFLOW_RUN. Per altre informazioni di calcolo, fare riferimento a job_task_run_timelinetable.

Non popolato per le righe emesse prima della fine di agosto 2024
result_state stringa Risultato dell'esecuzione del lavoro Per le possibili values, vedere values, Stato del risultato
termination_code stringa Codice di terminazione dell'esecuzione del compito Per le possibili values, vedere codice di terminazione values.

Non popolato per le righe emesse prima della fine di agosto 2024
job_parameters mappa Il livello di lavoro parameters utilizzato nell'esecuzione del lavoro Le impostazioni deprecate notebook_params non sono incluse in questo campo.

Non popolato per le righe emesse prima della fine di agosto 2024

Query di esempio

-- This query gets the daily job count for a workspace for the last 7 days:
SELECT
  workspace_id,
  COUNT(DISTINCT run_id) as job_count,
  to_date(period_start_time) as date
FROM system.lakeflow.job_run_timeline
WHERE
  period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
GROUP BY ALL

-- This query returns the daily job count for a workspace for the last 7 days, distributed by the outcome of the job run.
SELECT
  workspace_id,
  COUNT(DISTINCT run_id) as job_count,
  result_state,
  to_date(period_start_time) as date
FROM system.lakeflow.job_run_timeline
WHERE
  period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
  AND result_state IS NOT NULL
GROUP BY ALL

-- This query returns the average time of job runs, measured in seconds. The records are organized by job. A top 90 and a 95 percentile column show the average lengths of the job's longest runs.
with job_run_duration as (
    SELECT
        workspace_id,
        job_id,
        run_id,
        CAST(SUM(period_end_time - period_start_time) AS LONG) as duration
    FROM
        system.lakeflow.job_run_timeline
    WHERE
      period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
    GROUP BY ALL
)
SELECT
    t1.workspace_id,
    t1.job_id,
    COUNT(DISTINCT t1.run_id) as runs,
    MEAN(t1.duration) as mean_seconds,
    AVG(t1.duration) as avg_seconds,
    PERCENTILE(t1.duration, 0.9) as p90_seconds,
    PERCENTILE(t1.duration, 0.95) as p95_seconds
FROM
    job_run_duration t1
GROUP BY ALL
ORDER BY mean_seconds DESC
LIMIT 100

-- This query provides a historical runtime for a specific job based on the `run_name` parameter. For the query to work, you must set the `run_name`.
SELECT
  workspace_id,
  run_id,
  SUM(period_end_time - period_start_time) as run_time
FROM system.lakeflow.job_run_timeline
WHERE
  run_type="SUBMIT_RUN"
  AND run_name={run_name}
  AND period_start_time > CURRENT_TIMESTAMP() - INTERVAL 60 DAYS
GROUP BY ALL

-- This query collects a list of retried job runs with the number of retries for each run.
with repaired_runs as (
    SELECT
    workspace_id, job_id, run_id, COUNT(*) - 1 as retries_count
    FROM system.lakeflow.job_run_timeline
    WHERE result_state IS NOT NULL
    GROUP BY ALL
    HAVING retries_count > 0
    )
SELECT
    *
FROM repaired_runs
ORDER BY retries_count DESC
    LIMIT 10;

Cronologia di esecuzione attività lavorativa tableschema

La sequenza temporale di esecuzione dell'attività lavorativa table non è modificabile e completa quando viene prodotta.

Table percorso: system.lakeflow.job_task_run_timeline

nome Column Tipo di dati Descrizione Note
account_id stringa ID dell'account a cui appartiene l'attività
workspace_id stringa ID dell'area di lavoro a cui appartiene questo processo
job_id stringa ID del lavoro Solo univoco all'interno di una singola area di lavoro
run_id stringa ID dell'esecuzione dell'attività
job_run_id stringa ID dell'esecuzione del processo Non popolato per le righe emesse prima della fine di agosto 2024
parent_run_id stringa ID dell'esecuzione padre Non popolato per le righe emesse prima della fine di agosto 2024
period_start_time timestamp Ora di inizio per l'attività o per il periodo di tempo Le informazioni Timezone vengono registrate alla fine del valore con +00:00 che rappresenta UTC.
period_end_time timestamp Ora di fine per l'attività o per il periodo di tempo Timezone informazioni vengono registrate alla fine del valore con +00:00 che rappresenta l'ora UTC
task_key stringa Chiave di riferimento per un'attività in una mansione Questa chiave è univoca solo all'interno di un singolo compito
compute_ids array La matrice compute_ids contiene ID di cluster di processi, cluster interattivi e magazzini SQL usati dall'attività del processo
result_state stringa Risultato dell'esecuzione dell'attività lavorativa Per le possibili values, vedere values Stato risultato
termination_code stringa Codice di terminazione dell'esecuzione dell'attività Per le possibili values, vedere codice di terminazione values.

Non popolato per le righe emesse prima della fine di agosto 2024

Modelli di join comuni

Nelle sezioni seguenti vengono fornite query di esempio che evidenziano i modelli di join usati comunemente per il sistema dei lavori tables.

Join la sequenza temporale di esecuzione dei lavori e dei processi tables

Arricchire l'esecuzione di un processo con un nome di processo

with jobs as (
    SELECT
        *,
        ROW_NUMBER() OVER (PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
    FROM system.lakeflow.jobs QUALIFY rn=1
)
SELECT
    job_run_timeline.*
    jobs.name
FROM system.lakeflow.job_run_timeline
    LEFT JOIN jobs USING (workspace_id, job_id)

Arricchire l'uso con un nome di lavoro

with jobs as (
  SELECT
    *,
    ROW_NUMBER() OVER (PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
  FROM system.lakeflow.jobs QUALIFY rn=1
)
SELECT
  usage.*,
  coalesce(usage_metadata.job_name, jobs.name) as job_name
FROM system.billing.usage
  LEFT JOIN jobs ON usage.workspace_id=jobs.workspace_id AND usage.usage_metadata.job_id=jobs.job_id
WHERE
  billing_origin_product="JOBS"

Join la sequenza temporale e l'utilizzo dell'esecuzione del lavoro tables

Arricchire ogni log di fatturazione con i metadati di esecuzione del processo

SELECT
    t1.*,
    t2.*
FROM system.billing.usage t1
    LEFT JOIN system.lakeflow.job_run_timeline t2
        ON t1.workspace_id = t2.workspace_id
            AND t1.usage_metadata.job_id = t2.job_id
            AND t1.usage_metadata.job_run_id = t2.run_id
            AND t1.usage_start_time >= date_trunc("Hour", t2.period_start_time)
            AND t1.usage_start_time < date_trunc("Hour", t2.period_end_time) + INTERVAL 1 HOUR
WHERE
    billing_origin_product="JOBS"

Calcolare il costo per ogni esecuzione del processo

Questa query si unisce al sistema billing.usage e al sistema table per calcolare un costo per esecuzione di un processo.

with jobs_usage AS (
  SELECT
    *,
    usage_metadata.job_id,
    usage_metadata.job_run_id as run_id,
    identity_metadata.run_as as run_as
  FROM system.billing.usage
  WHERE billing_origin_product="JOBS"
),
jobs_usage_with_usd AS (
  SELECT
    jobs_usage.*,
    usage_quantity * pricing.default as usage_usd
  FROM jobs_usage
    LEFT JOIN system.billing.list_prices pricing ON
      jobs_usage.sku_name = pricing.sku_name
      AND pricing.price_start_time <= jobs_usage.usage_start_time
      AND (pricing.price_end_time >= jobs_usage.usage_start_time OR pricing.price_end_time IS NULL)
      AND pricing.currency_code="USD"
),
jobs_usage_aggregated AS (
  SELECT
    workspace_id,
    job_id,
    run_id,
    FIRST(run_as, TRUE) as run_as,
    sku_name,
    SUM(usage_usd) as usage_usd,
    SUM(usage_quantity) as usage_quantity
  FROM jobs_usage_with_usd
  GROUP BY ALL
)
SELECT
  t1.*,
  MIN(period_start_time) as run_start_time,
  MAX(period_end_time) as run_end_time,
  FIRST(result_state, TRUE) as result_state
FROM jobs_usage_aggregated t1
  LEFT JOIN system.lakeflow.job_run_timeline t2 USING (workspace_id, job_id, run_id)
GROUP BY ALL
ORDER BY usage_usd DESC
LIMIT 100

Get log di utilizzo per un processo di SUBMIT_RUN

SELECT
  *
FROM system.billing.usage
WHERE
  EXISTS (
      SELECT 1
      FROM system.lakeflow.job_run_timeline
      WHERE
        job_run_timeline.job_id = usage_metadata.job_id
        AND run_name={run_name}
        AND workspace_id={workspace_id}
  )

Join la sequenza temporale di esecuzione dell'attività di processo e i cluster tables

Arricchire le esecuzioni dei processi di lavoro con i metadati dei cluster

with clusters as (
    SELECT
        *,
        ROW_NUMBER() OVER (PARTITION BY workspace_id, cluster_id ORDER BY change_time DESC) as rn
    FROM system.compute.clusters QUALIFY rn=1
),
exploded_task_runs AS (
  SELECT
    *,
    EXPLODE(compute_ids) as cluster_id
  FROM system.lakeflow.job_task_run_timeline
  WHERE array_size(compute_ids) > 0
)
SELECT
  exploded_task_runs.*,
  clusters.*
FROM exploded_task_runs t1
  LEFT JOIN clusters t2
    USING (workspace_id, cluster_id)

Trovare processi in esecuzione in un ambiente di calcolo all-purpose

Questa query si unisce al sistema compute.clusterstable per restituire i processi recenti in esecuzione in un ambiente di calcolo generico anziché nel calcolo dedicato ai processi.

with clusters AS (
  SELECT
    *,
    ROW_NUMBER() OVER(PARTITION BY workspace_id, cluster_id ORDER BY change_time DESC) as rn
  FROM system.compute.clusters
  WHERE cluster_source="UI" OR cluster_source="API"
  QUALIFY rn=1
),
job_tasks_exploded AS (
  SELECT
    workspace_id,
    job_id,
    EXPLODE(compute_ids) as cluster_id
  FROM system.lakeflow.job_task_run_timeline
  WHERE period_start_time >= CURRENT_DATE() - INTERVAL 30 DAY
),
all_purpose_cluster_jobs AS (
  SELECT
    t1.*,
    t2.cluster_name,
    t2.owned_by,
    t2.dbr_version
  FROM job_tasks_exploded t1
    INNER JOIN clusters t2 USING (workspace_id, cluster_id)
)
SELECT * FROM all_purpose_cluster_jobs LIMIT 10;

Dashboard di monitoraggio dei lavori

Il dashboard seguente usa tables di sistema per get avviato il monitoraggio dei processi e dell'integrità operativa. Include casi d'uso comuni, ad esempio il rilevamento delle prestazioni dei processi, il monitoraggio degli errori e l'utilizzo delle risorse.

dashboard per l'osservabilità dei costi dei lavori

Per informazioni sul download del dashboard, vedere Monitorare i costi dei processi e le prestazioni & con il sistema tables

Risoluzione dei problemi

job non è autenticato nel lakeflow.jobstable

Se un lavoro non è visibile nel sistema tables:

  • Il lavoro non è stato modificato negli ultimi 365 giorni.
    • Modificare qualsiasi dei campi dell'attività presenti nella schema per generare un nuovo record.
  • Il lavoro è stato creato in una regione diversa
  • Creazione di posti di lavoro recenti (table)

Impossibile trovare un lavoro visualizzato nel job_run_timelinetable

Non tutte le esecuzioni dell'attività sono visibili ovunque. Mentre le voci JOB_RUN vengono visualizzate in tutte le tablescorrelate ai processi, le esecuzioni del flusso di lavoro del notebook WORKFLOW_RUN vengono registrate solo in job_run_timeline e le esecuzioni inviate una tantum SUBMIT_RUN vengono registrate in entrambe le sequenze temporali di tables. Queste esecuzioni non vengono popolate in altri tables del sistema di processi, ad esempio jobs o job_tasks.

Per una suddivisione dettagliata, vedere i Tipi di esecuzione riportati di seguito; ogni tipo di esecuzione è visibile e accessibiletablewhere.

'esecuzione del processo non è visibile in billing.usagetable

In system.billing.usage, il usage_metadata.job_id viene popolato solo per i processi eseguiti in job compute o nel calcolo serverless.

Inoltre, i processi WORKFLOW_RUN non hanno la propria attribuzione usage_metadata.job_id o usage_metadata.job_run_id in system.billing.usage. Invece, il loro utilizzo di calcolo viene attribuito al notebook padre che li ha avviati. Ciò significa che quando un notebook avvia un lancio del flusso di lavoro, tutti i costi di calcolo sono riportati sotto l'utilizzo del notebook padre, non come un processo del flusso di lavoro separato.

Per altre informazioni, vedere Analizzare i metadati di utilizzo.

Calcolare il costo di un task in esecuzione in un ambiente di calcolo multiuso

Il calcolo preciso dei costi per i processi in esecuzione nel calcolo per scopi non è possibile con 100% accuratezza. Quando un processo viene eseguito in un calcolo interattivo (tutto scopo), più carichi di lavoro come notebook, query SQL o altri processi spesso vengono eseguiti contemporaneamente sulla stessa risorsa di calcolo. Poiché le risorse del cluster sono condivise, non esiste un mapping diretto 1:1 tra i costi di calcolo e le esecuzioni di singoli processi.

Per tenere traccia accurata dei costi dei lavori, Databricks consiglia l'esecuzione di lavori in un ambiente di calcolo dedicato o serverless; where, usage_metadata.job_id, e usage_metadata.job_run_id consentono un'attribuzione precisa dei costi.

Se è necessario utilizzare il calcolo generico, è possibile:

  • Monitorare l'utilizzo complessivo del cluster e i costi in system.billing.usage in base a usage_metadata.cluster_id.
  • Tenere traccia delle metriche di esecuzione del lavoro separatamente.
  • Si consideri che qualsiasi stima dei costi sarà approssimativa a causa delle risorse condivise.

Per altre informazioni sull'attribuzione dei costi, vedere Analizzare i metadati di utilizzo.

Riferimento values

La sezione seguente include i riferimenti per selectcolumns nei lavori correlati a tables.

tipo di trigger values

Le possibili values per il trigger_typecolumn sono:

  • CONTINUOUS
  • CRON
  • FILE_ARRIVAL
  • ONETIME
  • ONETIME_RETRY

Tipo di esecuzione values

Le possibili values per il run_typecolumn sono:

Digitare Descrizione Posizione dell'interfaccia utente Punto di accesso API Sistema Tables
JOB_RUN Esecuzione di lavori standard Interfaccia utente Processi & esecuzioni di processi /jobs e /jobs/runs endpoint processi, attività lavorative, cronologia esecuzione processi, cronologia esecuzione attività lavorative
SUBMIT_RUN Esecuzione una tantum tramite POST /jobs/runs/submit Solo l'interfaccia utente esecuzioni processi /jobs/runs endpoints only cronologia_esecuzione_lavoro, cronologia_esecuzione_attività_lavoro
WORKFLOW_RUN Esecuzione avviata dal flusso di lavoro del notebook Non visibile Non accessibile cronologia esecuzione lavoro

Stato risultato values

Le possibili values per il result_statecolumn sono:

Stato Descrizione
SUCCEEDED L'esecuzione è stata completata con successo
FAILED Esecuzione completata con un errore
SKIPPED Non è mai stata eseguita perché non è stata soddisfatta una condizione
CANCELLED L'esecuzione è stata annullata alla richiesta dell'utente
TIMED_OUT L'esecuzione è stata arrestata dopo aver raggiunto il timeout
ERROR Esecuzione completata con un errore
BLOCKED L'esecuzione è stata bloccata in una dipendenza upstream

codice di terminazione values

Le possibili values per il termination_codeecolumn sono:

Codice di terminazione Descrizione
SUCCESS L'esecuzione è stata completata correttamente
CANCELLED L'esecuzione è stata annullata dalla piattaforma Databricks; ad esempio, se è stata superata la durata massima consentita.
SKIPPED L'esecuzione non è mai stata avviata, ad esempio se l'esecuzione del compito upstream non è riuscita, la condizione del tipo di dipendenza non è stata soddisfatta o non erano disponibili compiti concreti da eseguire.
DRIVER_ERROR L'esecuzione ha rilevato un errore durante la comunicazione con il driver Spark
CLUSTER_ERROR L'esecuzione non è riuscita a causa di un errore del cluster
REPOSITORY_CHECKOUT_FAILED Impossibile completare la transazione a causa di un errore durante la comunicazione con il servizio di terze parti
INVALID_CLUSTER_REQUEST L'esecuzione non è riuscita perché ha emesso una richiesta non valida per avviare il cluster
WORKSPACE_RUN_LIMIT_EXCEEDED L'area di lavoro ha raggiunto la quota per il numero massimo di esecuzioni attive simultanee. Valutare la possibilità di pianificare le esecuzioni in un intervallo di tempo più ampio
FEATURE_DISABLED L'esecuzione non è riuscita perché ha tentato di accedere a una funzionalità non disponibile per l'area di lavoro
CLUSTER_REQUEST_LIMIT_EXCEEDED Il numero di richieste per la creazione, l'avvio e l'espansione del cluster ha superato il limite di frequenza consentito limit. Prendere in considerazione di distribuire l'esecuzione dell'operazione su un arco di tempo più ampio
STORAGE_ACCESS_ERROR L'esecuzione non è riuscita a causa di un errore durante l'accesso all'archiviazione BLOB del cliente
RUN_EXECUTION_ERROR L'esecuzione è stata completata con errori di attività
UNAUTHORIZED_ERROR L'esecuzione non è riuscita a causa di un problema di autorizzazione durante l'accesso a una risorsa
LIBRARY_INSTALLATION_ERROR L'esecuzione non è riuscita durante l'installazione della libreria richiesta dall'utente. Le cause possono includere, ma non sono limitate a: la libreria fornita non è valida, non sono disponibili autorizzazioni sufficienti per installare la libreria e così via
MAX_CONCURRENT_RUNS_EXCEEDED L'esecuzione programmata supera il massimo numero di esecuzioni simultanee limit per il processo set
MAX_SPARK_CONTEXTS_EXCEEDED L'esecuzione è pianificata in un cluster che ha già raggiunto il numero massimo di contesti configurati per la creazione
RESOURCE_NOT_FOUND Una risorsa necessaria per l'esecuzione di un processo non esiste
INVALID_RUN_CONFIGURATION L'esecuzione non è riuscita a causa di una configurazione non valida
CLOUD_FAILURE L'esecuzione non è riuscita a causa di un problema del provider di servizi cloud
MAX_JOB_QUEUE_SIZE_EXCEEDED L'esecuzione è stata ignorata a causa del raggiungimento della capacità della coda a livello di lavoro limit