A stale share is normally when you send a result (share) to the pool, but the share is "late" - so the share is valid, but too late for the height.
Why is the share late?
There are two factors that add latency to the share. The most obvious one are the latency from your miner to the mining pool
The lower the latency, the better. Lower latency equals to less stale shares.
The other factor are the latency in the miner. This latency include for example the time it takes for the GPU to recognize new work once it arrives from pool, the time it takes for the host system to read back the GPU results once a GPU thread found a share and potentially also the time it needs for the CPU to check a submit candidate before actually sending it. This normally adds around 30-50 ms.
What latency is acceptable?
We normally say everything below 2% stale share is fine. If the total latency - the time to get work from the mining pool + latency in the miner + the time to send work to the pool
- are 125ms, that equals to 1% stale shares.
And why does that equals to 1% stale?!
If we assume a block time at 12.5 seconds (Ethereum), thats total of 12500 ms. 1% of 12500ms equals to the 125ms in our above example!