AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 222326
Accepted
Frederik Vanderhaegen
Frederik Vanderhaegen
Asked: 2018-11-13 02:00:46 +0800 CST2018-11-13 02:00:46 +0800 CST 2018-11-13 02:00:46 +0800 CST

ponteiros do relógio do cache do servidor sql

  • 772

Estou fazendo algumas pesquisas sobre como solucionar problemas de pressão de memória local. Corrija-me se estiver errado, mas pelo que entendi é que o SQL Server usa um algoritmo CLOCK para o cache e userstores. Cada relógio tem dois ponteiros, um externo e um interno.

Meu interesse é pelo ponteiro do relógio interno. Se um trabalhador que acessa um cache percebe que um cache é maior que uma certa porcentagem de memória, o ponteiro do relógio interno começa a liberar memória para esse cache.

Usando o dmv dm_os_memory_cache_clock_handsposso ver informações sobre os ponteiros do relógio. A coluna rounds_countrepresenta quantas vezes os ponteiros do relógio varreram todo o cache. last_tick_timeé a hora em que o ponteiro se moveu pela última vez. round_start_timeé a hora da última varredura.

Qual é a diferença entre last_tick_timee round_start_time? A cache não é limpa quando a mão é movida?

Quantas entradas são removidas a cada tique-taque do relógio?

Alguém pode me ajudar a entender o funcionamento desse algoritmo de relógio no SQL Server?

sql-server memory
  • 1 1 respostas
  • 525 Views

1 respostas

  • Voted
  1. Best Answer
    Shanky
    2018-11-13T02:39:18+08:002018-11-13T02:39:18+08:00

    Corrija-me se estiver errado, mas pelo que entendi é que o SQL Server usa um algoritmo CLOCK para o cache e userstores. Cada relógio tem dois ponteiros, um externo e um interno.

    Sim, quase como o que você disse, mas deixe-me acrescentar algo mais. Cachee Userstorescompartilha custeio comum e algoritmo chamado de algoritmo menos usado recentemente (LRU). Este mecanismo LRU tem o que é chamado de "algoritmo de relógio". Este algoritmo tem o que é chamado de "mãos". Existem várias políticas de despejo que funcionam dentro do SQl Server para remover entradas "antigas" dos caches do SQL Server e para ajudar esse SQL Server tem 2 ponteiros de relógio:

    1. Externo: implementa a política global

    2. Interno: implementa a política local

    Política é algo que você pode considerar como regra ao lidar com a remoção de entradas antigas dos caches.

    Se um trabalhador que acessa um cache percebe que um cache é maior que uma certa porcentagem de memória, o ponteiro do relógio interno começa a liberar memória para esse cache.

    Há muito mais o que acontece, não é como se o relógio interno "apenas" liberar memória removendo entradas antigas depois que a memória total utilizada for maior que certa porcentagem, LRU e a pressão da memória interna também são levadas em consideração.

    Qual é a diferença entre last_tick_time e round_start_time? A cache não é limpa quando a mão é movida?

    last_tick_time- hora em que um ponteiro do relógio se moveu por último.

    round_start_time- hora em que um ponteiro de relógio iniciou a rodada atual. A volta que fez para varrer os caches.

    Quantas entradas são removidas a cada tique-taque do relógio?

    Não há valor predefinido, depois que o algoritmo LRU tiver feito sua tarefa, outro thread veria quantas entradas no cache são "antigas" e as removeria. Se houver pressão de memória, o valor pode aumentar e a varredura pode acontecer com muita frequência.

    Alguém pode me ajudar a entender o funcionamento desse algoritmo de relógio no SQL Server

    Slava Oaks da Microsoft já escreveu muito sobre isso. vou citar o blog dele

    No SQL Server 2005, introduzimos uma nova estrutura de cache comum. Todos os caches, exceto o Buffer Pool, o aproveitam. A estrutura consiste em um conjunto de lojas e ResourceMonitor. Existem três tipos de armazenamento: armazenamento em cache, armazenamento de usuário (o nome aqui está relacionado ao uso interno do armazenamento - ele não precisa fazer nada com um usuário) e armazenamento de objeto. Tanto o cache quanto os repositórios de usuários compartilham um mecanismo de LRU comum e aproveitam o custo comum. O cache de procedimento é um exemplo de armazenamento em cache e o cache de metadados é um exemplo de armazenamento de usuário. Os armazenamentos de objetos são apenas conjuntos de blocos de memória e não exigem LRU nem custo. A biblioteca de rede aproveita o armazenamento de objetos para agrupar buffers de rede.

    O mecanismo LRU da Store é bastante simples - usamos a variação de amplamente discutida no algoritmo de relógio da literatura do sistema operacional. Como você se lembra, o algoritmo do relógio tem uma mão. Quando a mão se move, diminui o custo de uma entrada. Quando o custo de uma entrada atinge 0, a entrada pode ser descartada do cache. O custo é redefinido sempre que uma entrada é reutilizada. Ao lidar com vários caches, um designer deve levar em consideração as políticas de despejo globais e locais. As políticas globais consideram a imagem global e permitem a execução de LRU, algoritmo de relógio, em todos os caches. Por sua vez, as políticas locais analisam apenas o consumo de recursos locais e executam LRU apenas para um determinado cache.

    Para satisfazer as políticas globais e locais, as lojas do SQL Server implementam dois ponteiros: externo e interno (não confunda nomes de ponteiros de relógio com tipos de pressão de memória. Não há conexão!). O ponteiro do relógio externo implementa a política global e o ponteiro do relógio interno implementa a política local. Mesmo que cada cache tenha sua própria mão externa, as mãos externas se movem "sincronicamente" - uma de cada vez. Sua tarefa é simular a mão global.

    Leitura adicional: The Clock Hands of Buffer cache

    • 3

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve