The Mercedes driver repeated his FP1-topping form on Friday afternoon with a 1m05.483s that put him 0.147s clear of Sebastian Vettel’s Ferrari.
Hamilton’s best was half a second quicker than he went in the morning, when he had posted the fastest-ever lap of the 2.68-mile circuit.
Vettel prevented a Mercedes one-two by edging Valtteri Bottas by less than a tenth, although the Finn’s best effort before switching to long runs was hurt by a mistake in the final sector.
Haas driver Kevin Magnussen kicked off the running with a 1m07.891s, but that was quickly beaten by a tenth by the soft-shod Ferrari of Kimi Raikkonen.
Bottas used supersofts to lower the benchmark to a 1m06.690s, then became the first driver to dip below Hamilton’s FP1 best with a 1m05.869s.
He and Hamilton traded fastest laps before Hamilton and Vettel both failed to convert session-best sectors into an overall improvement while trying to match Bottas’s new best of 1m05.700s.
After pitting for ultrasoft tyres, Bottas then set the fastest first and second sectors of the session but ran wide at Turn 9 and only managed to improve by 0.001s.
Bottas was lucky to avoid the barriers after sliding through the gravel trap on the exit of Turn 6 and spinning, and Vettel removed him from top spot immediately after with an ultrasoft lap of 1m05.630s.
A couple of minutes later Hamilton capped the flurry of ultrasoft efforts at the end of the opening half an hour with a 1m05.483s that remained unbeaten as drivers switched to race preparation.
Both of the Red Bulls outpaced Raikkonen, Max Verstappen beating Daniel Ricciardo to fourth despite missing most of the opening half an hour with a brake problem.
Haas driver Kevin Magnussen jumped to seventh just before the halfway mark, while Fernando Alonso also switched to ultrasofts later than most to claim eighth – though he had a trip through the Turn 6 gravel that caused him to spin in the final 10 minutes.
Nico Hulkenberg returned to the seat of his Renault for FP2 and went ninth fastest, but teammate Jolyon Palmer completed just seven laps and spent most of the session in the pitlane as the team worked on his R.S.17.
Toro Rosso drivers Carlos Sainz and Daniil Kvyat also had their session prematurely, Sainz after damaging the car running wide at Turn 9 and Kvyat with a brake problem.
Sauber detached at the foot of the times, Pascal Wehrlein beating a frustrated Marcus Ericsson, who had a spin at Turn 1, a trip through the gravel at the downhill Turn 4 and went off at Turn 9 as well.