> ## Documentation Index
> Fetch the complete documentation index at: https://docs.chaintable.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Advanced features

> Set a block table's start height, check consensus progress, and inspect asynchronous write jobs.

This page covers the operations. For what start height and consensus height mean, see [How tables work](/guides/tables/model#block-data-and-processing-progress).

## Set the start height

Before the first write, open the block table, click the settings icon beside **Schema**, set **Start Height**, and save. You cannot change it directly after the table contains data, so decide the historical coverage when creating the table.

For example, if the table should cover blocks from `25939925` onward, set its start height to `25939925` before the first write. A small backfill can also keep the default `0`.

## Check consensus height

Read a block table's current consensus height:

```python theme={null}
from blockdb import StateTable

height = StateTable('demo.pool_reserves.eth').get_consensus_height()
print(height)
```

After the ten-block backfill in [Track liquidity pool reserves](/quickstart/build/track-pool-reserves), the processed range is `25939925` through `25939934` while the table still has the default start height of `0`, so this prints `0`.

## Inspect asynchronous write jobs

`batch_write()` returning `True` means only that the job was submitted. Each table supporting batch writes has a job table with ID `<table_id>._write`. Click **write** under the target table's **Relations** to open it.

<Frame>
  <img src="https://mintcdn.com/opcodelabspteltd/TOA0bb8_WqdBuVVN/images/guides/tables/write-jobs.png?fit=max&auto=format&n=TOA0bb8_WqdBuVVN&q=85&s=e558831a2f4389320ba206d4e455f1ba" alt="Asynchronous asset_notes write jobs with succeed status" width="1920" height="1080" data-path="images/guides/tables/write-jobs.png" />
</Frame>

Read write-job records for a normal table:

```python theme={null}
from blockdb import NormalTable

jobs = NormalTable('demo.asset_notes._write').filter_rows(limit=10)
for job in jobs:
    print(job['id'], job['status'], job.get('error_message'))
```

| Field                         | Purpose                                             |
| ----------------------------- | --------------------------------------------------- |
| `id`                          | Write job ID                                        |
| `status`                      | Job status; the success value is `succeed`          |
| `row_count`                   | Number of input rows                                |
| `input_bytes`                 | Size of the input data, in bytes                    |
| `submitted_at` / `updated_at` | Submission and last-update timestamps               |
| `error_message`               | Error information supplied by the job; may be empty |
| `client_id`                   | Submitting client or instance identifier            |
| `strategy`                    | Write method and target table for this job          |
